>
> Ok, applied without the renaming as r244530. I guess you added that to cut
> the recursion.
>
> Would it be fine to install the patch to active branches after proper testing?
OK
Honza
> Thanks,
> Martin
>
> >> bool consider_placement_new,
> >> bool consider_bases)
> >> {
> >> @@ -463,18 +463,18 @@ contains_type_p (tree outer_type, HOST_WIDE_INT
> >> offset,
> >> /* Check that type is within range. */
> >> if (offset < 0)
> >> return false;
> >> - if (TYPE_SIZE (outer_type) && TYPE_SIZE (otr_type)
> >> - && TREE_CODE (TYPE_SIZE (outer_type)) == INTEGER_CST
> >> - && TREE_CODE (TYPE_SIZE (otr_type)) == INTEGER_CST
> >> - && wi::ltu_p (wi::to_offset (TYPE_SIZE (outer_type)),
> >> - (wi::to_offset (TYPE_SIZE (otr_type)) + offset)))
> >> - return false;
> >> +
> >> + /* PR ipa/71207
> >> + As OUTER_TYPE can be a type which has a diamond virtual inheritance,
> >> + it's not necessary that INNER_TYPE will fit within OUTER_TYPE with
> >> + a given offset. It can happen that INNER_TYPE also contains a base
> >> object,
> >> + however it would point to the same instance in the OUTER_TYPE. */
> >>
> >> context.offset = offset;
> >> context.outer_type = TYPE_MAIN_VARIANT (outer_type);
> >> context.maybe_derived_type = false;
> >> context.dynamic = false;
> >> - return context.restrict_to_inner_class (otr_type,
> >> consider_placement_new,
> >> + return context.restrict_to_inner_class (inner_type,
> >> consider_placement_new,
> >> consider_bases);
> >> }
> >>
> >> diff --git a/gcc/testsuite/g++.dg/ipa/pr71207.C
> >> b/gcc/testsuite/g++.dg/ipa/pr71207.C
> >> new file mode 100644
> >> index 00000000000..19a03998460
> >> --- /dev/null
> >> +++ b/gcc/testsuite/g++.dg/ipa/pr71207.C
> >> @@ -0,0 +1,42 @@
> >> +/* PR ipa/71207 */
> >> +/* { dg-do run } */
> >> +
> >> +class Class1
> >> +{
> >> +public:
> >> + Class1() {};
> >> + virtual ~Class1() {};
> >> +
> >> +protected:
> >> + unsigned Field1;
> >> +};
> >> +
> >> +class Class2 : public virtual Class1
> >> +{
> >> +};
> >> +
> >> +class Class3 : public virtual Class1
> >> +{
> >> +public:
> >> + virtual void Method1() = 0;
> >> +
> >> + void Method2()
> >> + {
> >> + Method1();
> >> + }
> >> +};
> >> +
> >> +class Class4 : public Class2, public virtual Class3
> >> +{
> >> +public:
> >> + Class4() {};
> >> + virtual void Method1() {};
> >> +};
> >> +
> >> +int main()
> >> +{
> >> + Class4 var1;
> >> + var1.Method2();
> >> +
> >> + return 0;
> >> +}
> >> --
> >> 2.11.0
> >>
> >