aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authoranetczuk <anetczuk@o2.pl>2025-01-14 20:35:44 +0100
committerJason Merrill <jason@redhat.com>2025-01-14 15:24:17 -0500
commit6e0b048fb5bc0809048ef8f487830ad26f4b87cf (patch)
tree0699162aef5d598249f195f9edb0bb2a79bd59b7 /gcc
parentc8894b681143041205d41e02ede112cef082bf2f (diff)
downloadgcc-6e0b048fb5bc0809048ef8f487830ad26f4b87cf.zip
gcc-6e0b048fb5bc0809048ef8f487830ad26f4b87cf.tar.gz
gcc-6e0b048fb5bc0809048ef8f487830ad26f4b87cf.tar.bz2
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/lang-dump-1.C22
-rw-r--r--gcc/tree-dump.cc7
2 files changed, 29 insertions, 0 deletions
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 0000000..4176894
--- /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 c234d1c..bec36b4 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;