sim/d10v: Use offsetof in a static assertion about structure layout.
authorJohn Baldwin <jhb@FreeBSD.org>
Sat, 22 May 2021 00:26:24 +0000 (17:26 -0700)
committerJohn Baldwin <jhb@FreeBSD.org>
Sat, 22 May 2021 00:27:05 +0000 (17:27 -0700)
clang 11 fails to compile the static assertion as it cannot compute
the pointer value at a compile time:

gdb/sim/d10v/interp.c:1149:37: error: static_assert expression is not an integral constant expression
  static_assert ((uintptr_t) &State == (uintptr_t) &State.regs,
                 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

Instead, assert that the offset of State.regs is 0.

sim/d10v/ChangeLog:

* interp.c (sim_create_inferior): Use offsetof in static
assertion.

sim/d10v/ChangeLog
sim/d10v/interp.c

index e45bd3833b09ba38df0b1c8d11b93e516556e8ad..e633352c58d397b4d15147f8c9fb61e0c3c7efa9 100644 (file)
@@ -1,3 +1,8 @@
+2021-05-22  John Baldwin  <jhb@FreeBSD.org>
+
+       * interp.c (sim_create_inferior): Use offsetof in static
+       assertion.
+
 2021-05-17  Mike Frysinger  <vapier@gentoo.org>
 
        * sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Delete.
index b56b204c72d8b5acd68a28ebc618e39866bc7a91..b587cc18654f624ddb67de5cf25cba3bf5b6c84f 100644 (file)
@@ -1146,8 +1146,8 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
   bfd_vma start_address;
 
   /* Make sure we have the right structure for the following memset.  */
-  static_assert ((uintptr_t) &State == (uintptr_t) &State.regs,
-                "&State != &State.regs");
+  static_assert (offsetof (struct _state, regs) == 0,
+                "State.regs is not at offset 0");
 
   /* Reset state from the regs field until the mem field.  */
   memset (&State, 0, (uintptr_t) &State.mem - (uintptr_t) &State.regs);