]> git.ipfire.org Git - thirdparty/gcc.git/commit
c: Fix typeof_unqual handling of qualified array types [PR112841]
authorJoseph Myers <josmyers@redhat.com>
Fri, 22 Nov 2024 20:33:10 +0000 (20:33 +0000)
committerJoseph Myers <josmyers@redhat.com>
Fri, 22 Nov 2024 20:33:10 +0000 (20:33 +0000)
commit84a335eb4f9641a471184d86900609dd97215218
tree4a0b1d3a538c3956c0c11918562e346483a0cfdf
parent684595188dea02d246edb66106d82bb7a9a22d79
c: Fix typeof_unqual handling of qualified array types [PR112841]

As reported in bug 112841, typeof_unqual fails to remove qualifiers
from qualified array types.  In C23 (unlike in previous standard
versions), array types are considered to have the qualifiers of the
element type, so typeof_unqual should remove such qualifiers (and an
example in the standard shows that is as intended).  Fix this by
calling strip_array_types when checking for the presence of
qualifiers.  (The reason we check for qualifiers rather than just
using TYPE_MAIN_VARIANT unconditionally is to avoid, as a quality of
implementation matter, unnecessarily losing typedef information in the
case where the type is already unqualified.)

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

PR c/112841

gcc/c/
* c-parser.cc (c_parser_typeof_specifier): Call strip_array_types
when checking for type qualifiers for typeof_unqual.

gcc/testsuite/
* gcc.dg/c23-typeof-4.c: New test.
gcc/c/c-parser.cc
gcc/testsuite/gcc.dg/c23-typeof-4.c [new file with mode: 0644]