On Tue, Jan 14, 2025 at 08:35:44PM +0100, anetczuk wrote: > Thanks for review. New version in attachment.
Thanks, your patch looks good to me but I can't approve it. FWIW, the result is that instead of: @123 obj_type_ref type: @147 we'll print: @123 obj_type_ref type: @147 expr: @148 obj : @124 tok : @149 > On 2025-01-14 19:03, Marek Polacek wrote: > > On Mon, Jan 13, 2025 at 11:03:54PM +0100, anetczuk wrote: > > > Raw dump of lang tree was missing information about virtual method call. > > Please resend the patch as an attachment, it's not applicable as-is. > > > The information is provided in "tok" field of obj_type_ref. > > > > > > gcc/ChangeLog: > > > > > > * tree-dump.cc (dequeue_and_dump): Handle OBJ_TYPE_REF. > > > > > > gcc/testsuite/ChangeLog: > > > > > > * g++.dg/lang-dump-1.C: New test. > > > > > > --- > > > > > > gcc/testsuite/g++.dg/lang-dump-1.C | 22 ++++++++++++++++++++++ > > > > > > gcc/tree-dump.cc | 7 +++++++ > > > > > > 2 files changed, 29 insertions(+) > > > > > > create mode 100644 gcc/testsuite/g++.dg/lang-dump-1.C > > > > > > diff --git a/gcc/testsuite/g++.dg/lang-dump-1.C > > > b/gcc/testsuite/g++.dg/lang-dump-1.C > > > > > > new file mode 100644 > > > > > > index 00000000000..cc467aee0f0 > > > > > > --- /dev/null > > > > > > +++ b/gcc/testsuite/g++.dg/lang-dump-1.C > > This should go to g++.dg/diagnostic/. > > > @@ -0,0 +1,22 @@ > > > > > > +/* { dg-do compile } */ > > Please use // here. > > Otherwise the patch looks okay. > > > > > +// { dg-additional-options "-fdump-lang-raw" } > > > > > > +// Check if dump file contains OBJ_TYPE_REF with additional fields > > > (information about called virtual method). > > > > > > + > > > > > > +class VExample { > > > > > > +public: > > > > > > + virtual void methodV1() {} > > > > > > + virtual void methodV2() {} > > > > > > +}; > > > > > > + > > > > > > +void funcA() { > > > > > > + VExample objA; > > > > > > + VExample *ptrA = &objA; > > > > > > + > > > > > > + ptrA->methodV2(); > > > > > > + ptrA->methodV1(); > > > > > > +} > > > > > > + > > > > > > +// { dg-final { scan-lang-dump-times {obj_type_ref[^\n]*type:} 2 raw } } > > > > > > +// { dg-final { scan-lang-dump-times {obj_type_ref[^\n]*expr:} 2 raw } } > > > > > > +// { dg-final { scan-lang-dump-times {obj_type_ref[^\n]*obj :} 2 raw } } > > > > > > +// { dg-final { scan-lang-dump-times {obj_type_ref[^\n]*\n[^\n]*tok :} 2 > > > raw } } > > > > > > diff --git a/gcc/tree-dump.cc b/gcc/tree-dump.cc > > > > > > index c234d1ccaf3..bec36b41ea5 100644 > > > > > > --- a/gcc/tree-dump.cc > > > > > > +++ b/gcc/tree-dump.cc > > > > > > @@ -697,6 +697,13 @@ dequeue_and_dump (dump_info_p di) > > > > > > dump_child ("op: ", OMP_CLAUSE_OPERAND (t, i)); > > > > > > } > > > > > > break; > > > > > > + > > > > > > + case OBJ_TYPE_REF: > > > > > > + dump_child ("expr", OBJ_TYPE_REF_EXPR (t)); > > > > > > + dump_child ("obj", OBJ_TYPE_REF_OBJECT (t)); > > > > > > + dump_child ("tok", OBJ_TYPE_REF_TOKEN (t)); > > > > > > + break; > > > > > > + > > > > > > default: > > > > > > /* There are no additional fields to print. */ > > > > > > break; > > > > > > -- > > > > > > 2.43.0 > > > > > Marek > > > From 3008f34d16f441ba5ae8c3938d27d8715246995e Mon Sep 17 00:00:00 2001 > From: anetczuk <anetc...@o2.pl> > Date: Mon, 13 Jan 2025 20:27:04 +0100 > Subject: [PATCH] c++: dump-lang-raw with obj_type_ref fields > > Raw dump of lang tree was missing information about virtual method call. > The information is provided in "tok" field of obj_type_ref. > > gcc/ChangeLog: > > * tree-dump.cc (dequeue_and_dump): Handle OBJ_TYPE_REF. > > gcc/testsuite/ChangeLog: > > * g++.dg/diagnostic/lang-dump-1.C: New test. > --- > gcc/testsuite/g++.dg/diagnostic/lang-dump-1.C | 22 +++++++++++++++++++ > gcc/tree-dump.cc | 7 ++++++ > 2 files changed, 29 insertions(+) > create mode 100644 gcc/testsuite/g++.dg/diagnostic/lang-dump-1.C > > diff --git a/gcc/testsuite/g++.dg/diagnostic/lang-dump-1.C > b/gcc/testsuite/g++.dg/diagnostic/lang-dump-1.C > new file mode 100644 > index 00000000000..41768949f12 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/diagnostic/lang-dump-1.C > @@ -0,0 +1,22 @@ > +// { dg-do compile } > +// { dg-additional-options "-fdump-lang-raw" } > +// Check if dump file contains OBJ_TYPE_REF with additional fields > (information about called virtual method). > + > +class VExample { > +public: > + virtual void methodV1() {} > + virtual void methodV2() {} > +}; > + > +void funcA() { > + VExample objA; > + VExample *ptrA = &objA; > + > + ptrA->methodV2(); > + ptrA->methodV1(); > +} > + > +// { dg-final { scan-lang-dump-times {obj_type_ref[^\n]*type:} 2 raw } } > +// { dg-final { scan-lang-dump-times {obj_type_ref[^\n]*expr:} 2 raw } } > +// { dg-final { scan-lang-dump-times {obj_type_ref[^\n]*obj :} 2 raw } } > +// { dg-final { scan-lang-dump-times {obj_type_ref[^\n]*\n[^\n]*tok :} 2 raw > } } > diff --git a/gcc/tree-dump.cc b/gcc/tree-dump.cc > index c234d1ccaf3..bec36b41ea5 100644 > --- a/gcc/tree-dump.cc > +++ b/gcc/tree-dump.cc > @@ -697,6 +697,13 @@ dequeue_and_dump (dump_info_p di) > dump_child ("op: ", OMP_CLAUSE_OPERAND (t, i)); > } > break; > + > + case OBJ_TYPE_REF: > + dump_child ("expr", OBJ_TYPE_REF_EXPR (t)); > + dump_child ("obj", OBJ_TYPE_REF_OBJECT (t)); > + dump_child ("tok", OBJ_TYPE_REF_TOKEN (t)); > + break; > + > default: > /* There are no additional fields to print. */ > break; > -- > 2.43.0 > Marek