From: Tom de Vries Date: Thu, 20 Mar 2025 10:16:59 +0000 (+0100) Subject: [gdb/build] Fix build with gcc 9 X-Git-Tag: binutils-2_45~1090 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d3d4840e802ef6ee4353872401ded5cc5cf87ecb;p=thirdparty%2Fbinutils-gdb.git [gdb/build] Fix build with gcc 9 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::key; ^ ... due to this code: ... template class gdbpy_registry { ... template using StorageKey = typename registry::key; template Storage *get_storage (O *owner, const StorageKey &key) const { ... } ... } ... As an experiment, I tried out eliminating the type alias: ... template Storage *get_storage (O *owner, const typename registry::key &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::key &key) const ^~~ gdb/python/python-internal.h:1211:63: note: use ‘registry::template key’ \ to indicate that it is a template ... Following that suggestion, I tried: ... template Storage * get_storage (O *owner, const typename registry::template key &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. --- 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 @@ public: private: template - using StorageKey = typename registry::key; + using StorageKey = typename registry::template key; template Storage *get_storage (O *owner, const StorageKey &key) const