[COMMITTED,aarch64] Avoid initializers for VLAs

Message ID CAB=4xhqBjK74FgnW+87W0G+Rsmxm8vc106X3Nc7nDOCGGPoSAg@mail.gmail.com
State New
Headers
Series [COMMITTED,aarch64] Avoid initializers for VLAs |

Commit Message

Roland McGrath Feb. 9, 2023, 7:06 p.m. UTC
  C99 does not permit initializers for variable length arrays, and Clang
now enforces this.
Committed as obvious enough.

Thanks,
Roland

commit b695fdd9b2494a64db1fb8e584753a1a5afec494 (HEAD -> master)
Author: Roland McGrath <mcgrathr@google.com>
Date:   Thu Feb 9 10:47:17 2023 -0800

    [aarch64] Avoid initializers for VLAs

    Clang doesn't accept initializer syntax for variable-length
    arrays in C. Just use memset instead.
  

Comments

Simon Marchi Feb. 9, 2023, 7:13 p.m. UTC | #1
On 2/9/23 14:06, Roland McGrath via Gdb-patches wrote:
> C99 does not permit initializers for variable length arrays, and Clang
> now enforces this.
> Committed as obvious enough.
>
> commit b695fdd9b2494a64db1fb8e584753a1a5afec494 (HEAD -> master)
> Author: Roland McGrath <mcgrathr@google.com>
> Date:   Thu Feb 9 10:47:17 2023 -0800
> 
>     [aarch64] Avoid initializers for VLAs
> 
>     Clang doesn't accept initializer syntax for variable-length
>     arrays in C. Just use memset instead.

"C99" and "C" don't really make sense, since this is C++.  Perhaps it's
the same error in C++, but the message is a bit misleading.

It's too late for this one, but when fixing a compilation error, please
put the compiler error in the commit message.

> 
> diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c
> index e4158236db2..ecb2eeb9540 100644
> --- a/gdb/aarch64-linux-nat.c
> +++ b/gdb/aarch64-linux-nat.c
> @@ -56,6 +56,8 @@
> 
>  #include "nat/aarch64-mte-linux-ptrace.h"
> 
> +#include <string.h>
> +
>  #ifndef TRAP_HWBKPT
>  #define TRAP_HWBKPT 0x0004
>  #endif
> @@ -445,7 +447,9 @@ fetch_tlsregs_from_thread (struct regcache *regcache)
>    gdb_assert (regno != -1);
>    gdb_assert (tdep->tls_register_count > 0);
> 
> -  uint64_t tpidrs[tdep->tls_register_count] = { 0 };
> +  uint64_t tpidrs[tdep->tls_register_count];
> +  memset(tpidrs, 0, sizeof(tpidrs));

Missing space before parentheses.

> +
>    struct iovec iovec;
>    iovec.iov_base = tpidrs;
>    iovec.iov_len = sizeof (tpidrs);
> @@ -471,7 +475,8 @@ store_tlsregs_to_thread (struct regcache *regcache)
>    gdb_assert (regno != -1);
>    gdb_assert (tdep->tls_register_count > 0);
> 
> -  uint64_t tpidrs[tdep->tls_register_count] = { 0 };
> +  uint64_t tpidrs[tdep->tls_register_count];
> +  memset(tpidrs, 0, sizeof(tpidrs));

Same.

Simon
  
Luis Machado Feb. 9, 2023, 10:51 p.m. UTC | #2
On 2/9/23 19:06, Roland McGrath via Gdb-patches wrote:
> C99 does not permit initializers for variable length arrays, and Clang
> now enforces this.
> Committed as obvious enough.

Yep. Thanks for patching this up.

> 
> Thanks,
> Roland
> 
> commit b695fdd9b2494a64db1fb8e584753a1a5afec494 (HEAD -> master)
> Author: Roland McGrath <mcgrathr@google.com>
> Date:   Thu Feb 9 10:47:17 2023 -0800
> 
>      [aarch64] Avoid initializers for VLAs
> 
>      Clang doesn't accept initializer syntax for variable-length
>      arrays in C. Just use memset instead.
> 
> diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c
> index e4158236db2..ecb2eeb9540 100644
> --- a/gdb/aarch64-linux-nat.c
> +++ b/gdb/aarch64-linux-nat.c
> @@ -56,6 +56,8 @@
> 
>   #include "nat/aarch64-mte-linux-ptrace.h"
> 
> +#include <string.h>
> +
>   #ifndef TRAP_HWBKPT
>   #define TRAP_HWBKPT 0x0004
>   #endif
> @@ -445,7 +447,9 @@ fetch_tlsregs_from_thread (struct regcache *regcache)
>     gdb_assert (regno != -1);
>     gdb_assert (tdep->tls_register_count > 0);
> 
> -  uint64_t tpidrs[tdep->tls_register_count] = { 0 };
> +  uint64_t tpidrs[tdep->tls_register_count];
> +  memset(tpidrs, 0, sizeof(tpidrs));
> +
>     struct iovec iovec;
>     iovec.iov_base = tpidrs;
>     iovec.iov_len = sizeof (tpidrs);
> @@ -471,7 +475,8 @@ store_tlsregs_to_thread (struct regcache *regcache)
>     gdb_assert (regno != -1);
>     gdb_assert (tdep->tls_register_count > 0);
> 
> -  uint64_t tpidrs[tdep->tls_register_count] = { 0 };
> +  uint64_t tpidrs[tdep->tls_register_count];
> +  memset(tpidrs, 0, sizeof(tpidrs));
> 
>     for (int i = 0; i < tdep->tls_register_count; i++)
>       {
  

Patch

diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c
index e4158236db2..ecb2eeb9540 100644
--- a/gdb/aarch64-linux-nat.c
+++ b/gdb/aarch64-linux-nat.c
@@ -56,6 +56,8 @@ 

 #include "nat/aarch64-mte-linux-ptrace.h"

+#include <string.h>
+
 #ifndef TRAP_HWBKPT
 #define TRAP_HWBKPT 0x0004
 #endif
@@ -445,7 +447,9 @@  fetch_tlsregs_from_thread (struct regcache *regcache)
   gdb_assert (regno != -1);
   gdb_assert (tdep->tls_register_count > 0);

-  uint64_t tpidrs[tdep->tls_register_count] = { 0 };
+  uint64_t tpidrs[tdep->tls_register_count];
+  memset(tpidrs, 0, sizeof(tpidrs));
+
   struct iovec iovec;
   iovec.iov_base = tpidrs;
   iovec.iov_len = sizeof (tpidrs);
@@ -471,7 +475,8 @@  store_tlsregs_to_thread (struct regcache *regcache)
   gdb_assert (regno != -1);
   gdb_assert (tdep->tls_register_count > 0);

-  uint64_t tpidrs[tdep->tls_register_count] = { 0 };
+  uint64_t tpidrs[tdep->tls_register_count];
+  memset(tpidrs, 0, sizeof(tpidrs));

   for (int i = 0; i < tdep->tls_register_count; i++)
     {