aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2019-04-16 16:47:53 -0700
committerMichael Forney <mforney@mforney.org>2019-04-16 17:11:41 -0700
commit056de5d46edfd4f5882217248c49fa64a9ecff48 (patch)
tree150b3bb640c3bd8854c05160969baa52ffaa1aff
parent07ca02cc2d0a2137433f29186aa838d68ded7e9a (diff)
downloadcproc-056de5d46edfd4f5882217248c49fa64a9ecff48.tar.xz
Use undecayed type in __typeof__
-rw-r--r--decl.c2
-rw-r--r--test/typeof-decay.c2
-rw-r--r--test/typeof-decay.qbe1
3 files changed, 5 insertions, 0 deletions
diff --git a/decl.c b/decl.c
index f137533..bfe1435 100644
--- a/decl.c
+++ b/decl.c
@@ -345,6 +345,8 @@ declspecs(struct scope *s, enum storageclass *sc, enum funcspec *fs, int *align)
t = typename(s, &tq);
if (!t) {
e = expr(s);
+ if (e->decayed)
+ e = e->unary.base;
t = e->type;
tq |= e->qual;
delexpr(e);
diff --git a/test/typeof-decay.c b/test/typeof-decay.c
new file mode 100644
index 0000000..1e38d82
--- /dev/null
+++ b/test/typeof-decay.c
@@ -0,0 +1,2 @@
+char a[4];
+__typeof__(a) a;
diff --git a/test/typeof-decay.qbe b/test/typeof-decay.qbe
new file mode 100644
index 0000000..8992e9b
--- /dev/null
+++ b/test/typeof-decay.qbe
@@ -0,0 +1 @@
+export data $a = align 1 { z 4 }