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 0000000000000000000000000000000000000000..41768949f12f3e00155e356008b0d0b3090a2887 --- /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 c234d1ccaf3762628f7e812dfb5befff337007ab..bec36b41ea570cfab5eccf62bcf46978e9daf9b6 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;