diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2021-02-24 22:34:26 +0100 |
|---|---|---|
| committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2021-02-24 22:50:16 +0100 |
| commit | 567dfd4f41d732043876dadc0697ba3b540066da (patch) | |
| tree | 5e8de2fb9086ae36a7b0f461dbc0aac117b503fa /validation | |
| parent | 60c1f2706e30eacc29296e6cb5d9327c85a01340 (diff) | |
| download | sparse-dev-567dfd4f41d732043876dadc0697ba3b540066da.tar.gz | |
fix eval of the assignment of a non-restricted value to a restricted variable
Assignment to restricted variables are severely ... restricted.
Nevertheless, one value is always fine because it has always
the same bit representation: 0.
So, 0 is accepted unconditionally but this creates a problem
because the type of this 0 needs to be adjusted. Otherwise
0 (int) is assigned as-is even on restricted variable with a
different bit-length.
Fix this by casting the value to the target type before accepting it.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'validation')
| -rw-r--r-- | validation/eval/assign-restricted-ok.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/validation/eval/assign-restricted-ok.c b/validation/eval/assign-restricted-ok.c new file mode 100644 index 00000000..df94d8c9 --- /dev/null +++ b/validation/eval/assign-restricted-ok.c @@ -0,0 +1,22 @@ +#ifdef __CHECKER__ +#define __bitwise __attribute__((bitwise)) +#else +#define __bitwise +#endif + +typedef __INT16_TYPE__ __bitwise __be16; + +static __be16 foo(void) +{ + __be16 val = 0; + return val; +} + +/* + * check-name: assign-restricted-ok + * check-command: test-linearize -fdump-ir $file + * + * check-output-ignore + * check-output-contains: store\\.16 + * check-output-excludes: store\\.32 + */ |
