gdbhooks: Update gdbhooks.py for recent tree_code_type changes [PR108634]
Checks
Commit Message
Hi!
On Mon, Mar 13, 2023 at 04:15:12PM -0400, Jason Merrill wrote:
> The r13-6577 change to use tree_code_type_tmpl in earlier C++ dialects broke
> gdbhooks, which expects tree_code_type to always be available. I considered
> trying to make gdbhooks more robust, but it seemed simpler to define
> tree_code_type as a reference to the template.
As I said earlier, I think it is better to tweak gdbhooks.
The following patch does that, I've tested it now both with gcc 12 and
older gcc as system compiler and the patch fixed the latter while keeping
the former working as before.
Ok for trunk?
2023-03-14 Jakub Jelinek <jakub@redhat.com>
PR plugins/108634
* gdbhooks.py (TreePrinter.to_string): Wrap
gdb.parse_and_eval('tree_code_type') in a try block, parse
and eval 'tree_code_type_tmpl<0>::tree_code_type' instead if it
raises exception. Update comments for the recent tree_code_type
changes.
Jakub
Comments
On 3/14/23 11:42, Jakub Jelinek wrote:
> Hi!
>
> On Mon, Mar 13, 2023 at 04:15:12PM -0400, Jason Merrill wrote:
>> The r13-6577 change to use tree_code_type_tmpl in earlier C++ dialects broke
>> gdbhooks, which expects tree_code_type to always be available. I considered
>> trying to make gdbhooks more robust, but it seemed simpler to define
>> tree_code_type as a reference to the template.
>
> As I said earlier, I think it is better to tweak gdbhooks.
>
> The following patch does that, I've tested it now both with gcc 12 and
> older gcc as system compiler and the patch fixed the latter while keeping
> the former working as before.
>
> Ok for trunk?
LGTM, OK on Friday if no other comments.
> 2023-03-14 Jakub Jelinek <jakub@redhat.com>
>
> PR plugins/108634
> * gdbhooks.py (TreePrinter.to_string): Wrap
> gdb.parse_and_eval('tree_code_type') in a try block, parse
> and eval 'tree_code_type_tmpl<0>::tree_code_type' instead if it
> raises exception. Update comments for the recent tree_code_type
> changes.
>
> --- gcc/gdbhooks.py.jj 2023-03-04 11:24:01.348791347 +0100
> +++ gcc/gdbhooks.py 2023-03-14 16:35:48.445671242 +0100
> @@ -220,13 +220,23 @@ class TreePrinter:
>
> val_TREE_CODE = self.node.TREE_CODE()
>
> - # extern const enum tree_code_class tree_code_type[];
> + # constexpr inline enum tree_code_class tree_code_type[] = { ... };
> # #define TREE_CODE_CLASS(CODE) tree_code_type[(int) (CODE)]
> + # or
> + # template <int N>
> + # struct tree_code_type_tmpl {
> + # static constexpr enum tree_code_class tree_code_type[] = { ... };
> + # }; };
> + # #define TREE_CODE_CLASS(CODE) \
> + # tree_code_type_tmpl <0>::tree_code_type[(int) (CODE)]
>
> if val_TREE_CODE == 0xa5a5:
> return '<ggc_freed 0x%x>' % intptr(self.gdbval)
>
> - val_tree_code_type = gdb.parse_and_eval('tree_code_type')
> + try:
> + val_tree_code_type = gdb.parse_and_eval('tree_code_type')
> + except:
> + val_tree_code_type = gdb.parse_and_eval('tree_code_type_tmpl<0>::tree_code_type')
> val_tclass = val_tree_code_type[val_TREE_CODE]
>
> val_tree_code_name = gdb.parse_and_eval('tree_code_name')
>
>
> Jakub
>
@@ -220,13 +220,23 @@ class TreePrinter:
val_TREE_CODE = self.node.TREE_CODE()
- # extern const enum tree_code_class tree_code_type[];
+ # constexpr inline enum tree_code_class tree_code_type[] = { ... };
# #define TREE_CODE_CLASS(CODE) tree_code_type[(int) (CODE)]
+ # or
+ # template <int N>
+ # struct tree_code_type_tmpl {
+ # static constexpr enum tree_code_class tree_code_type[] = { ... };
+ # }; };
+ # #define TREE_CODE_CLASS(CODE) \
+ # tree_code_type_tmpl <0>::tree_code_type[(int) (CODE)]
if val_TREE_CODE == 0xa5a5:
return '<ggc_freed 0x%x>' % intptr(self.gdbval)
- val_tree_code_type = gdb.parse_and_eval('tree_code_type')
+ try:
+ val_tree_code_type = gdb.parse_and_eval('tree_code_type')
+ except:
+ val_tree_code_type = gdb.parse_and_eval('tree_code_type_tmpl<0>::tree_code_type')
val_tclass = val_tree_code_type[val_TREE_CODE]
val_tree_code_name = gdb.parse_and_eval('tree_code_name')