]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Skip layout derivation for C-compatible unchecked union types
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 4 Mar 2026 13:27:06 +0000 (14:27 +0100)
committerMarc Poulhiès <dkm@gcc.gnu.org>
Tue, 2 Jun 2026 08:42:33 +0000 (10:42 +0200)
The machinery that computes the layout of derived types does not support
C-compatible unchecked union types, but their layout is fixed in any case.

gcc/ada/ChangeLog:

* gcc-interface/decl.cc (gnat_to_gnu_entity) <E_Record_Type>: Do not
derive the layout of C-compatible unchecked union types.

gcc/ada/gcc-interface/decl.cc

index 9b64544a2f2c170e3d8c576d6cb6003b9915f846..cf6c37f1ca236d071769823eb59e5f66bf19d8fc 100644 (file)
@@ -3551,8 +3551,11 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
              }
 
        /* If this is a derived type with discriminants and these discriminants
-          affect the initial shape it has inherited, factor them in.  */
-       if (has_discr
+          affect the initial shape it has inherited, factor them in, but this
+          is not needed for a C-compatible Unchecked_Union since the variants
+          are at offset 0 in there.  */
+       if (TREE_CODE (gnu_type) == RECORD_TYPE
+           && has_discr
            && !is_extension
            && !Has_Record_Rep_Clause (gnat_entity)
            && Stored_Constraint (gnat_entity) != No_Elist