summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathaniel Shead <nathanieloshead@gmail.com>2025-11-01 22:59:33 +1100
committerNathaniel Shead <nathanieloshead@gmail.com>2025-11-01 23:25:30 +1100
commitfad7547a50166f21fe4445af073e6b58e1a8473d (patch)
tree54c64d092a325aa35221dfc7cce862579454e00b
parent0186567e505055abdc94601f5491150ecd13fa70 (diff)
c++/modules: Stream BASELINK_OPTYPE [PR122381]
This is used in template conversion operators to determine what type the user requested. PR c++/122381 gcc/cp/ChangeLog: * module.cc (trees_out::core_vals): Write BASELINK_OPTYPE (aka TREE_CHAIN). (trees_in::core_vals): Read it. gcc/testsuite/ChangeLog: * g++.dg/modules/convop-2_a.H: New test. * g++.dg/modules/convop-2_b.C: New test. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> (cherry picked from commit b466450c6d502557921f03527cc165fb3402aaa9)
-rw-r--r--gcc/cp/module.cc2
-rw-r--r--gcc/testsuite/g++.dg/modules/convop-2_a.H10
-rw-r--r--gcc/testsuite/g++.dg/modules/convop-2_b.C5
3 files changed, 17 insertions, 0 deletions
diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
index 8c64a82f7ed..632dc47552a 100644
--- a/gcc/cp/module.cc
+++ b/gcc/cp/module.cc
@@ -6690,6 +6690,7 @@ trees_out::core_vals (tree t)
WT (((lang_tree_node *)t)->baselink.binfo);
WT (((lang_tree_node *)t)->baselink.functions);
WT (((lang_tree_node *)t)->baselink.access_binfo);
+ WT (((lang_tree_node *)t)->baselink.common.chain);
break;
case CONSTRAINT_INFO:
@@ -7259,6 +7260,7 @@ trees_in::core_vals (tree t)
RT (((lang_tree_node *)t)->baselink.binfo);
RTU (((lang_tree_node *)t)->baselink.functions);
RT (((lang_tree_node *)t)->baselink.access_binfo);
+ RT (((lang_tree_node *)t)->baselink.common.chain);
break;
case CONSTRAINT_INFO:
diff --git a/gcc/testsuite/g++.dg/modules/convop-2_a.H b/gcc/testsuite/g++.dg/modules/convop-2_a.H
new file mode 100644
index 00000000000..62bb2101f69
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/convop-2_a.H
@@ -0,0 +1,10 @@
+// PR c++/122381
+// { dg-additional-options "-fmodule-header" }
+// { dg-module-cmi {} }
+
+template <typename T> struct color_ref {
+ operator int() const { return 0; }
+ int foo(color_ref x) {
+ return x.operator int();
+ }
+};
diff --git a/gcc/testsuite/g++.dg/modules/convop-2_b.C b/gcc/testsuite/g++.dg/modules/convop-2_b.C
new file mode 100644
index 00000000000..d1e829ec70c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/convop-2_b.C
@@ -0,0 +1,5 @@
+// PR c++/122381
+// { dg-additional-options "-fmodules" }
+
+import "convop-2_a.H";
+template struct color_ref<int>;