From 9f0fcc2c52d136fb8891f1ce2e135bdb1273df19 Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Fri, 13 Nov 2015 15:42:25 +0100 Subject: Issue #71: incorrect initialization of wchar_t arrays from wide string literal Regression test added in regression/initializers.c --- test/regression/Results/initializers | 3 +++ test/regression/initializers.c | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) (limited to 'test') diff --git a/test/regression/Results/initializers b/test/regression/Results/initializers index 18339f74..a3c92e86 100644 --- a/test/regression/Results/initializers +++ b/test/regression/Results/initializers @@ -25,3 +25,6 @@ x23 = { hd = 8, tl = ok } x24[6] = { '/', '*', 'B', '*', '/', 0, } x25[4] = { "/tmp" } x26[6] = { 'w', 'o', 'r', 'l', 'd', 0, } +x27[4] = { 'a', 'b', 'c', 0, } +x28[2] = { 'a', 'b', } +x29[10] = { 'a', 'b', 'c', 0, 0, 0, 0, 0, 0, 0, } diff --git a/test/regression/initializers.c b/test/regression/initializers.c index 31f73734..6c8fadc9 100644 --- a/test/regression/initializers.c +++ b/test/regression/initializers.c @@ -1,3 +1,4 @@ +#include #include int x0; @@ -67,6 +68,11 @@ char * x25[] = { "/tmp" }; /* One more */ char x26[] = { "world" }; +/* Wide strings (issue #71) */ +wchar_t x27[] = L"abc"; +wchar_t x28[2] = L"abc"; +wchar_t x29[10] = L"abc"; + static void print_chars(char * s, int sz) { int i; @@ -78,6 +84,17 @@ static void print_chars(char * s, int sz) } } +static void print_wchars(wchar_t * s, int sz) +{ + int i; + for (i = 0; i < sz; i++) { + if (s[i] >= 32 && s[i] < 127) + printf("'%c', ", (char) s[i]); + else + printf("%d, ", (int) s[i]); + } +} + int main() { int i; @@ -137,6 +154,15 @@ int main() printf("x26[%d] = { ", (int) sizeof(x26)); print_chars(x26, sizeof(x26)); printf("}\n"); + printf("x27[%d] = { ", (int) (sizeof(x27) / sizeof(wchar_t))); + print_wchars(x27, sizeof(x27) / sizeof(wchar_t)); + printf("}\n"); + printf("x28[%d] = { ", (int) (sizeof(x28) / sizeof(wchar_t))); + print_wchars(x28, sizeof(x28) / sizeof(wchar_t)); + printf("}\n"); + printf("x29[%d] = { ", (int) (sizeof(x29) / sizeof(wchar_t))); + print_wchars(x29, sizeof(x29) / sizeof(wchar_t)); + printf("}\n"); return 0; } -- cgit