diff options
author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-08-09 16:18:40 +0200 |
---|---|---|
committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2020-08-09 16:18:40 +0200 |
commit | 19506bc2873eaf5a201248a4a0a0606f6e022910 (patch) | |
tree | 0ceda5fe445f6e1927ec43427e3f2a8a6c8d622e | |
parent | 2f2539bc481a1d3d4a79f7fc37d3b047ccbfb250 (diff) | |
parent | c03ffb3212281d01b304781e67ea6fc38feb224e (diff) | |
download | sparse-19506bc2873eaf5a201248a4a0a0606f6e022910.tar.gz |
Merge branch 'empty-char' into next
* delay 'empty character constant' warning to phase 5
-rw-r--r-- | char.c | 5 | ||||
-rw-r--r-- | tokenize.c | 7 | ||||
-rw-r--r-- | validation/empty-char-constant.c | 9 | ||||
-rw-r--r-- | validation/preprocessor/empty-char-constant.c | 13 |
4 files changed, 28 insertions, 6 deletions
@@ -76,6 +76,11 @@ void get_char_constant(struct token *token, unsigned long long *val) case TOKEN_WIDE_CHAR: p = token->string->data; end = p + token->string->length - 1; + if (end == p) { + sparse_error(token->pos, "empty character constant"); + *val = 0; + return; + } break; case TOKEN_CHAR_EMBEDDED_0 ... TOKEN_CHAR_EMBEDDED_3: end = p + type - TOKEN_CHAR; @@ -625,12 +625,7 @@ static int eat_string(int next, stream_t *stream, enum token_type type) warning(stream_pos(stream), "string too long (%d bytes, %d bytes max)", len, MAX_STRING); len = MAX_STRING; } - if (delim == '\'' && len <= 4) { - if (len == 0) { - sparse_error(stream_pos(stream), - "empty character constant"); - return nextchar(stream); - } + if (delim == '\'' && len && len <= 4) { token_type(token) = type + len; memset(buffer + len, '\0', 4 - len); memcpy(token->embedded, buffer, 4); diff --git a/validation/empty-char-constant.c b/validation/empty-char-constant.c new file mode 100644 index 00000000..f674037a --- /dev/null +++ b/validation/empty-char-constant.c @@ -0,0 +1,9 @@ +static int a = ''; + +/* + * check-name: empty-char-constant + * + * check-error-start +empty-char-constant.c:1:16: error: empty character constant + * check-error-end + */ diff --git a/validation/preprocessor/empty-char-constant.c b/validation/preprocessor/empty-char-constant.c new file mode 100644 index 00000000..2c248159 --- /dev/null +++ b/validation/preprocessor/empty-char-constant.c @@ -0,0 +1,13 @@ +#if 0 + '' +#endif + +/* + * check-name: empty-char-constant + * check-command: sparse -E $file + * + * check-output-start + + + * check-output-end + */ |