@@ -406,7 +406,10 @@ static inline int is_string_type(struct symbol *type)
{
if (type->type == SYM_NODE)
type = type->ctype.base_type;
- return type->type == SYM_ARRAY && is_byte_type(type->ctype.base_type);
+ if (type->type != SYM_ARRAY)
+ return 0;
+ type = type->ctype.base_type;
+ return is_byte_type(type) || is_wchar_type(type);
}
static struct symbol *bad_expr_type(struct expression *expr)
@@ -32,7 +32,6 @@ static const __WCHAR_TYPE__ ko2[2] = L"abc";
/*
* check-name: init-wstring
* check-command: sparse -Winit-cstring $file
- * check-known-to-fail
*
* check-error-start
init-wstring.c:29:38: warning: too long initializer-string for array of char(no space for nul char)
When evaluating initializers, it must be known if it is for a string or not. But sparse doesn't known about wide strings. Fix this by modifying is_string_type() to use is_wchar_type() in addition of is_byte_type(). Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> --- evaluate.c | 5 ++++- validation/init-wstring.c | 1 - 2 files changed, 4 insertions(+), 2 deletions(-)