diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2022-05-22 20:46:58 +0200 |
|---|---|---|
| committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2022-05-31 13:49:29 +0200 |
| commit | 3d1d65bfe6dad089b9c2a8d69f36ba5301a9509c (patch) | |
| tree | f780af23ebc5de203303205323b33248d5b1be63 /validation | |
| parent | 99a5645a0edbafac8eb667e0f341a73bebb5f34d (diff) | |
| download | sparse-dev-3d1d65bfe6dad089b9c2a8d69f36ba5301a9509c.tar.gz | |
fix zero/sign extension of integer character constants
An integer character constant has type 'int' but, subtly enough,
its value is the one of a 'char' converted to an 'int'.
So, do this conversion.
Also set the type of wide character constants from 'long' to 'wchar_t'.
Link: https://lore.kernel.org/r/20210927130253.GH2083@kadam
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Reported-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'validation')
| -rw-r--r-- | validation/char-constant-signed.c | 9 | ||||
| -rw-r--r-- | validation/char-constant-unsigned.c | 9 |
2 files changed, 18 insertions, 0 deletions
diff --git a/validation/char-constant-signed.c b/validation/char-constant-signed.c new file mode 100644 index 00000000..be0fd5ce --- /dev/null +++ b/validation/char-constant-signed.c @@ -0,0 +1,9 @@ +int test(void) { return '\377' == -1; } + +/* + * check-name: char-constant-signed + * check-command: test-linearize -Wno-decl -fsigned-char $file + * + * check-output-ignore + * check-output-returns: 1 + */ diff --git a/validation/char-constant-unsigned.c b/validation/char-constant-unsigned.c new file mode 100644 index 00000000..d5642b16 --- /dev/null +++ b/validation/char-constant-unsigned.c @@ -0,0 +1,9 @@ +int test(void) { return '\377' == 255; } + +/* + * check-name: char-constant-unsigned + * check-command: test-linearize -Wno-decl -funsigned-char $file + * + * check-output-ignore + * check-output-returns: 1 + */ |
