aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2024-03-23 11:43:34 -0700
committerMichael Forney <mforney@mforney.org>2024-03-23 11:43:34 -0700
commit077df7145836eb86278db2ad31316841940babe4 (patch)
tree3c99037bc0e8b34055b52bd016c24db19ff2fabf
parent89d95b1ad4c1a29b43a6680ab77a44437685f801 (diff)
Change type of u8 string literals to unsigned char for C23
-rw-r--r--expr.c5
-rw-r--r--test/string-u8-type.c1
-rw-r--r--test/string-u8-type.qbe0
3 files changed, 4 insertions, 2 deletions
diff --git a/expr.c b/expr.c
index 20b943e..9a168de 100644
--- a/expr.c
+++ b/expr.c
@@ -531,11 +531,12 @@ stringconcat(struct stringlit *str, bool forceutf8)
len += strlen(src) - 2;
next();
} while (tok.kind == TSTRINGLIT);
- if (forceutf8 || kind == '8')
- kind = 0;
+ if (forceutf8)
+ kind = '8';
++len; /* null byte */
switch (kind) {
case 0: t = &typechar; break;
+ case '8': t = &typeuchar; break;
case 'u': t = &typeushort; break;
case 'U': t = &typeuint; break;
case 'L': t = targ->typewchar; break;
diff --git a/test/string-u8-type.c b/test/string-u8-type.c
new file mode 100644
index 0000000..d7fe074
--- /dev/null
+++ b/test/string-u8-type.c
@@ -0,0 +1 @@
+_Static_assert(__builtin_types_compatible_p(__typeof__(u8"abc"), unsigned char[]));
diff --git a/test/string-u8-type.qbe b/test/string-u8-type.qbe
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/string-u8-type.qbe