From 406cc7f2043e91352a629984522b539bb9fd6bff Mon Sep 17 00:00:00 2001 From: Virgile Prevosto <virgile.prevosto@m4x.org> Date: Fri, 16 Dec 2022 19:32:59 +0100 Subject: [PATCH] [tests] refactor const-assignments.c to ensure first run does not have warnings also make real errors for KO instructions --- tests/syntax/const-assignments.c | 3 +++ tests/syntax/oracle/const-assignments.0.res.oracle | 3 --- tests/syntax/oracle/const-assignments.1.res.oracle | 2 +- tests/syntax/oracle/const-assignments.10.res.oracle | 7 +++++++ tests/syntax/oracle/const-assignments.2.res.oracle | 2 +- tests/syntax/oracle/const-assignments.3.res.oracle | 2 +- tests/syntax/oracle/const-assignments.4.res.oracle | 2 +- tests/syntax/oracle/const-assignments.5.res.oracle | 2 +- tests/syntax/oracle/const-assignments.6.res.oracle | 2 +- tests/syntax/oracle/const-assignments.7.res.oracle | 5 +---- tests/syntax/oracle/const-assignments.8.res.oracle | 5 +---- tests/syntax/oracle/const-assignments.9.res.oracle | 4 +--- 12 files changed, 19 insertions(+), 20 deletions(-) create mode 100644 tests/syntax/oracle/const-assignments.10.res.oracle diff --git a/tests/syntax/const-assignments.c b/tests/syntax/const-assignments.c index caa00564dc0..fbe73e72e7b 100644 --- a/tests/syntax/const-assignments.c +++ b/tests/syntax/const-assignments.c @@ -12,6 +12,7 @@ STDOPT: +" -cpp-extra-args=-DT7" EXIT:1 STDOPT: +" -cpp-extra-args=-DT8" + STDOPT: +" -cpp-extra-args=-DT9" +"-kernel-warn-key typing:incompatible-types-call=abort" */ /* The first run is correct. The others should fail, as they include invalid assignments to const lvalues. */ @@ -103,9 +104,11 @@ void mutable_test_call(__attribute__((__fc_initialized_object)) const S* s) { int a = 1; k1(a + (s + 2)); k2(&(s + 2)->y); +#ifdef T9 /* KO: although s has the __fc_initialized_object attribute, z[0] has not (and cannot) and y is const. */ k2(&s->z[0]->y); +#endif } #ifdef T8 diff --git a/tests/syntax/oracle/const-assignments.0.res.oracle b/tests/syntax/oracle/const-assignments.0.res.oracle index 8e1f025840a..de3d0783c7c 100644 --- a/tests/syntax/oracle/const-assignments.0.res.oracle +++ b/tests/syntax/oracle/const-assignments.0.res.oracle @@ -1,6 +1,4 @@ [kernel] Parsing const-assignments.c (with preprocessing) -[kernel:typing:incompatible-types-call] const-assignments.c:108: Warning: - expected 'int *' but got argument of type 'int const *': & (s->z[0])->y /* Generated by Frama-C */ struct S { int x ; @@ -45,7 +43,6 @@ void mutable_test_call(S const *s) int a = 1; k1((S *)((s + 2) + a)); k2((int *)(& (s + 2)->y)); - k2((int *)(& (s->z[0])->y)); return; } diff --git a/tests/syntax/oracle/const-assignments.1.res.oracle b/tests/syntax/oracle/const-assignments.1.res.oracle index 195e9432c35..038ab482208 100644 --- a/tests/syntax/oracle/const-assignments.1.res.oracle +++ b/tests/syntax/oracle/const-assignments.1.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing const-assignments.c (with preprocessing) -[kernel] const-assignments.c:21: User Error: +[kernel] const-assignments.c:22: User Error: Cannot assign to non-modifiable lval x [kernel] User Error: stopping on file "const-assignments.c" that has errors. Add '-kernel-msg-key pp' for preprocessing command. diff --git a/tests/syntax/oracle/const-assignments.10.res.oracle b/tests/syntax/oracle/const-assignments.10.res.oracle new file mode 100644 index 00000000000..aaee700de3e --- /dev/null +++ b/tests/syntax/oracle/const-assignments.10.res.oracle @@ -0,0 +1,7 @@ +[kernel] Parsing const-assignments.c (with preprocessing) +[kernel:typing:incompatible-types-call] const-assignments.c:110: Warning: + expected 'int *' but got argument of type 'int const *': & (s->z[0])->y +[kernel] User Error: warning typing:incompatible-types-call treated as fatal error. +[kernel] User Error: stopping on file "const-assignments.c" that has errors. Add + '-kernel-msg-key pp' for preprocessing command. +[kernel] Frama-C aborted: invalid user input. diff --git a/tests/syntax/oracle/const-assignments.2.res.oracle b/tests/syntax/oracle/const-assignments.2.res.oracle index e253406148e..67303a701fc 100644 --- a/tests/syntax/oracle/const-assignments.2.res.oracle +++ b/tests/syntax/oracle/const-assignments.2.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing const-assignments.c (with preprocessing) -[kernel] const-assignments.c:27: User Error: +[kernel] const-assignments.c:28: User Error: Cannot assign to non-modifiable lval x [kernel] User Error: stopping on file "const-assignments.c" that has errors. Add '-kernel-msg-key pp' for preprocessing command. diff --git a/tests/syntax/oracle/const-assignments.3.res.oracle b/tests/syntax/oracle/const-assignments.3.res.oracle index 33c4bad33a3..79768f7799b 100644 --- a/tests/syntax/oracle/const-assignments.3.res.oracle +++ b/tests/syntax/oracle/const-assignments.3.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing const-assignments.c (with preprocessing) -[kernel] const-assignments.c:33: User Error: +[kernel] const-assignments.c:34: User Error: Cannot assign to non-modifiable lval x [kernel] User Error: stopping on file "const-assignments.c" that has errors. Add '-kernel-msg-key pp' for preprocessing command. diff --git a/tests/syntax/oracle/const-assignments.4.res.oracle b/tests/syntax/oracle/const-assignments.4.res.oracle index 8c9c93e9c82..0ae87270890 100644 --- a/tests/syntax/oracle/const-assignments.4.res.oracle +++ b/tests/syntax/oracle/const-assignments.4.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing const-assignments.c (with preprocessing) -[kernel] const-assignments.c:39: User Error: +[kernel] const-assignments.c:40: User Error: Cannot assign to non-modifiable lval x [kernel] User Error: stopping on file "const-assignments.c" that has errors. Add '-kernel-msg-key pp' for preprocessing command. diff --git a/tests/syntax/oracle/const-assignments.5.res.oracle b/tests/syntax/oracle/const-assignments.5.res.oracle index b7aa22f538e..395f59284a4 100644 --- a/tests/syntax/oracle/const-assignments.5.res.oracle +++ b/tests/syntax/oracle/const-assignments.5.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing const-assignments.c (with preprocessing) -[kernel] const-assignments.c:46: User Error: +[kernel] const-assignments.c:47: User Error: Cannot assign to non-modifiable lval x_0 [kernel] User Error: stopping on file "const-assignments.c" that has errors. Add '-kernel-msg-key pp' for preprocessing command. diff --git a/tests/syntax/oracle/const-assignments.6.res.oracle b/tests/syntax/oracle/const-assignments.6.res.oracle index f05bcf02955..349d3259223 100644 --- a/tests/syntax/oracle/const-assignments.6.res.oracle +++ b/tests/syntax/oracle/const-assignments.6.res.oracle @@ -1,5 +1,5 @@ [kernel] Parsing const-assignments.c (with preprocessing) -[kernel] const-assignments.c:52: User Error: +[kernel] const-assignments.c:53: User Error: Cannot assign to non-modifiable lval *x_0 [kernel] User Error: stopping on file "const-assignments.c" that has errors. Add '-kernel-msg-key pp' for preprocessing command. diff --git a/tests/syntax/oracle/const-assignments.7.res.oracle b/tests/syntax/oracle/const-assignments.7.res.oracle index 28fb4fda519..f397d365bca 100644 --- a/tests/syntax/oracle/const-assignments.7.res.oracle +++ b/tests/syntax/oracle/const-assignments.7.res.oracle @@ -1,8 +1,6 @@ [kernel] Parsing const-assignments.c (with preprocessing) -[kernel:typing:incompatible-types-call] const-assignments.c:60: Warning: +[kernel:typing:incompatible-types-call] const-assignments.c:61: Warning: expected 'int *' but got argument of type 'int const *': & x -[kernel:typing:incompatible-types-call] const-assignments.c:108: Warning: - expected 'int *' but got argument of type 'int const *': & (s->z[0])->y /* Generated by Frama-C */ struct S { int x ; @@ -53,7 +51,6 @@ void mutable_test_call(S const *s) int a = 1; k1((S *)((s + 2) + a)); k2((int *)(& (s + 2)->y)); - k2((int *)(& (s->z[0])->y)); return; } diff --git a/tests/syntax/oracle/const-assignments.8.res.oracle b/tests/syntax/oracle/const-assignments.8.res.oracle index ee37293dbcb..281cae543fc 100644 --- a/tests/syntax/oracle/const-assignments.8.res.oracle +++ b/tests/syntax/oracle/const-assignments.8.res.oracle @@ -1,8 +1,6 @@ [kernel] Parsing const-assignments.c (with preprocessing) -[kernel:typing:incompatible-types-call] const-assignments.c:66: Warning: +[kernel:typing:incompatible-types-call] const-assignments.c:67: Warning: expected 'int *' but got argument of type 'int const *': x_0 -[kernel:typing:incompatible-types-call] const-assignments.c:108: Warning: - expected 'int *' but got argument of type 'int const *': & (s->z[0])->y /* Generated by Frama-C */ struct S { int x ; @@ -53,7 +51,6 @@ void mutable_test_call(S const *s) int a = 1; k1((S *)((s + 2) + a)); k2((int *)(& (s + 2)->y)); - k2((int *)(& (s->z[0])->y)); return; } diff --git a/tests/syntax/oracle/const-assignments.9.res.oracle b/tests/syntax/oracle/const-assignments.9.res.oracle index ec0fc31a923..7d532fb832d 100644 --- a/tests/syntax/oracle/const-assignments.9.res.oracle +++ b/tests/syntax/oracle/const-assignments.9.res.oracle @@ -1,7 +1,5 @@ [kernel] Parsing const-assignments.c (with preprocessing) -[kernel:typing:incompatible-types-call] const-assignments.c:108: Warning: - expected 'int *' but got argument of type 'int const *': & (s->z[0])->y -[kernel] const-assignments.c:118: User Error: +[kernel] const-assignments.c:121: User Error: Cannot assign to non-modifiable lval t->s.y [kernel] User Error: stopping on file "const-assignments.c" that has errors. Add '-kernel-msg-key pp' for preprocessing command. -- GitLab