From e56d50bb88c984af8e1c45fa51aec3ee1f9f505d Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Fri, 22 Mar 2024 00:58:50 -0700 Subject: decl: Implement typeof_unqual --- decl.c | 14 ++++++++++++++ test/typeof_unqual.c | 3 +++ test/typeof_unqual.qbe | 2 ++ 3 files changed, 19 insertions(+) create mode 100644 test/typeof_unqual.c create mode 100644 test/typeof_unqual.qbe diff --git a/decl.c b/decl.c index 3a84a02..fc48dc9 100644 --- a/decl.c +++ b/decl.c @@ -420,6 +420,20 @@ declspecs(struct scope *s, enum storageclass *sc, enum funcspec *fs, int *align) ++ntypes; expect(TRPAREN, "to close 'typeof'"); break; + case TTYPEOF_UNQUAL: + next(); + expect(TLPAREN, "after 'typeof_unqual'"); + t = typename(s, NULL); + if (!t) { + e = expr(s); + if (e->decayed) + e = e->base; + t = e->type; + delexpr(e); + } + ++ntypes; + expect(TRPAREN, "to close 'typeof_unqual'"); + break; /* 6.7.5 Alignment specifier */ case TALIGNAS: diff --git a/test/typeof_unqual.c b/test/typeof_unqual.c new file mode 100644 index 0000000..1c748df --- /dev/null +++ b/test/typeof_unqual.c @@ -0,0 +1,3 @@ +const int a; +int b; +typeof_unqual(a) b; diff --git a/test/typeof_unqual.qbe b/test/typeof_unqual.qbe new file mode 100644 index 0000000..1305c74 --- /dev/null +++ b/test/typeof_unqual.qbe @@ -0,0 +1,2 @@ +export data $a = align 4 { z 4 } +export data $b = align 4 { z 4 } -- cgit v1.2.3