[pushed,gdb/build] Fix build with gcc 9

Message ID 20250320101746.17719-1-tdevries@suse.de
State Committed
Headers
Series [pushed,gdb/build] Fix build with gcc 9 |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 fail Patch failed to apply
linaro-tcwg-bot/tcwg_gdb_build--master-arm fail Patch failed to apply

Commit Message

Tom de Vries March 20, 2025, 10:17 a.m. UTC
  Since commit a691853148f ("gdb/python: introduce gdbpy_registry"), when
building gdb with gcc 9, I run into:
...
In file included from gdb/varobj.c:38:0:
gdb/python/python-internal.h:1211:47: error: expected ‘;’ before ‘<’ token
   using StorageKey = typename registry<O>::key<Storage>;
                                               ^
...
due to this code:
...
template <typename Storage>
class gdbpy_registry
{
  ...

  template<typename O>
  using StorageKey = typename registry<O>::key<Storage>;

  template<typename O>
  Storage *get_storage (O *owner, const StorageKey<O> &key) const
  { ... }

  ...
}
...

As an experiment, I tried out eliminating the type alias:
...
  template<typename O>
  Storage *get_storage (O *owner,
                        const typename registry<O>::key<Storage> &key) const
  { ... }
...
and got instead:
...
In file included from gdb/varobj.c:38:0:
gdb/python/python-internal.h:1211:63: error: non-template ‘key’ used as template
  Storage *get_storage (O *owner,
                        const typename registry<O>::key<Storage> &key) const
                                                     ^~~
gdb/python/python-internal.h:1211:63: note: use ‘registry<O>::template key’ \
  to indicate that it is a template
...

Following that suggestion, I tried:
...
  template<typename O>
  Storage *
  get_storage (O *owner,
               const typename registry<O>::template key<Storage> &key) const
  { ... }
...
which fixed the problem.

Likewise, adding the template keyword in the type alias fixes the original
problem, so fix it like that.

Tested on x86_64-linux.
---
 gdb/python/python-internal.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


base-commit: 2084a5debfa7ab82e94baecdb66695eb1627817e
  

Patch

diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index 5e6707346f9..3f1a2067fdb 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -1208,7 +1208,7 @@  class gdbpy_registry
 private:
 
   template<typename O>
-  using StorageKey = typename registry<O>::key<Storage>;
+  using StorageKey = typename registry<O>::template key<Storage>;
 
   template<typename O>
   Storage *get_storage (O *owner, const StorageKey<O> &key) const