Re: [PATCH gcc/* 0/2] Typed qualifiers

Mikael Morin <[email protected]> Mon, 6 Jul 2026 14:00:44 +0200
Newsgroups gmane.comp.gcc.algol68,gmane.comp.gcc.patches,gmane.comp.gcc.fortran,gmane.comp.gcc.jit,gmane.comp.gcc.rust
Message-ID <[email protected]>
Le 05/07/2026 à 23:15, Arsen Arsenović a écrit :
> From: Arsen Arsenović <[email protected]>
> 
> Hi!
> 
> This patch implements the refactor discussed in
> https://inbox.sourceware.org/gcc/[email protected]/
> for all the frontends and backends.
> 
> No functional changes intended.
> 
> A few points of note:
> 
> 1. The C FE could undergo a process of "modernization" to remove the
>     places where it implements qualifier joins/merges ad-hocly.  I
>     decided to leave this aside for now.
> 2. I decided to make qualifier_set a struct after all.  In most cases,
>     it should be easy to remove all of the potential overhead that
>     entails, which is limited to just the 32-bit targets anyway, AFAICT
>     (it is trivially copyable and destructible, and it is 2 chars long,
>     so it should be passed by registers on many ABIs).
> 3. Due to cp_declarator, I had to make qualifier_set trivially
>     default-constructible (or, alternatively, add a constructor to
>     cp_declarator).  This means it is slightly easier to misuse (because
>     'qualifier_set foo;' is uninitialized).
> 4. I didn't remove the Rust copies of expected/optional.h, as that broke
>     compilation a good bit.  Also, the Rust versions use rust_assert, the
>     new GCC one of course does not.  It'd be good to remove the former.
> 5. I've added a new union operation besides the 'merge' one discussed in
>     the previous email.  Merging two qualifier sets produces a qualifier
>     set that can be used in place of both.  The new operation ended up
>     being called 'join', and it simply produces a qualifier set
>     containing the qualifiers of both by simple syntactic concatenation.
> 6. Making the distinction above also made it quite clear what needs to
>     be done about the atomic qualifier.  For join, it is OK for one QS to
>     have _Atomic but not the other; for merge, it is not.
> 
> The C++ Named Address Space implementation benefited greatly from this
> patch (the changes here turned a number of bugs in that patch into
> compile errors).  I will send it soon (I want to write more
> target-independent self-tests for it first).
> 
> The reason the CC list is so long is because this patch touches multiple
> backends and nearly all frontends.  Luckily, most of the changes are
> mechanical, so, hopefully it shouldn't be difficult to review.
> 
> Reg-strapped on x86_64-linux-gnu, powerpc64le-linux-gnu.
> Build-tested for rl78-elf.
> Will be regression tested soon for amdgcn-amdhsa and (reg-strapped) for
> s390x-ibm-linux-gnu.  (these are slower)
> OK for trunk?  Assuming those tests find no bugs, of course.
OK for the fortran part.

There is one typo in the documentation comment of merge:
> +  /* Attempt to produce a qualifier_set that's a merge of qualifiers in THIS
> +     and OTHER.  Such a qualifier set can be used instead of either THIS or
> +     OTHERT safely.  (i.e. if a type was qualified by either THIS or OTHER, it
OTHER
> +     can be qualified by their merge instead safely, possibly through a
> +     conversion)
> +