self.expect_expr("derived.getOtherRef().value()", result_summary='"derived"')
self.expect_expr("base_ptr_to_derived->getOtherRef().value()", result_summary='"derived"')
self.expect_expr("base.getOtherRef().value()", result_summary='"base"')
+
+ self.expect_expr("referencing_derived.getOther()->get()->a", result_value='42')
OtherDerived& getOtherRef() override { return other_derived; }
};
+// A regression test for a class with at least two members containing a
+// covariant function, which is referenced through another covariant function.
+struct BaseWithMembers {
+ int a = 42;
+ int b = 47;
+ virtual BaseWithMembers *get() { return this; }
+};
+struct DerivedWithMembers: BaseWithMembers {
+ DerivedWithMembers *get() override { return this; }
+};
+struct ReferencingBase {
+ virtual BaseWithMembers *getOther() { return new BaseWithMembers(); }
+};
+struct ReferencingDerived: ReferencingBase {
+ DerivedWithMembers *getOther() { return new DerivedWithMembers(); }
+};
+
int main() {
Derived derived;
Base base;
(void)base_ptr_to_derived->getRef();
(void)base_ptr_to_derived->getOtherPtr();
(void)base_ptr_to_derived->getOtherRef();
+
+ ReferencingDerived referencing_derived;
return 0; // break here
}