diff options
author | Michael Forney <mforney@mforney.org> | 2019-03-12 18:59:35 -0700 |
---|---|---|
committer | Michael Forney <mforney@mforney.org> | 2019-03-12 18:59:54 -0700 |
commit | 1df176029efa0d1e971e8835178f254ab8881592 (patch) | |
tree | 9049bd650243bfdfa13a2a971b74b923a3c79b13 | |
parent | cd1c07667495e7dd991cfcd0637eddf2bb65eac9 (diff) | |
download | cproc-1df176029efa0d1e971e8835178f254ab8881592.tar.xz |
Allow string literals to initialize any array with character type
-rw-r--r-- | init.c | 3 | ||||
-rw-r--r-- | tests/initializer-unsigned-string.c | 1 | ||||
-rw-r--r-- | tests/initializer-unsigned-string.qbe | 1 |
3 files changed, 4 insertions, 1 deletions
@@ -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, } |