aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--init.c3
-rw-r--r--tests/initializer-unsigned-string.c1
-rw-r--r--tests/initializer-unsigned-string.qbe1
3 files changed, 4 insertions, 1 deletions
diff --git a/init.c b/init.c
index 3e11c71..27498b2 100644
--- a/init.c
+++ b/init.c
@@ -249,7 +249,8 @@ parseinit(struct scope *s, struct type *t)
if (expr->flags & EXPRFLAG_DECAYED && expr->unary.base->kind == EXPRSTRING) {
expr = expr->unary.base;
base = typeunqual(t->base, NULL);
- if (!typecompatible(expr->type->base, base))
+ /* XXX: wide string literals */
+ if (!(typeprop(base) & PROPCHAR))
error(&tok.loc, "array initializer is string literal with incompatible type");
if (t->incomplete)
updatearray(t, expr->string.size);
diff --git a/tests/initializer-unsigned-string.c b/tests/initializer-unsigned-string.c
new file mode 100644
index 0000000..a932889
--- /dev/null
+++ b/tests/initializer-unsigned-string.c
@@ -0,0 +1 @@
+unsigned char s[] = "abc";
diff --git a/tests/initializer-unsigned-string.qbe b/tests/initializer-unsigned-string.qbe
new file mode 100644
index 0000000..46be123
--- /dev/null
+++ b/tests/initializer-unsigned-string.qbe
@@ -0,0 +1 @@
+export data $s = align 1 { b "abc", z 1, }