Fix wrong assumption in contains_type_p (PR ipa/71207).
2017-01-17 Martin Liska <mliska@suse.cz> PR ipa/71207 * g++.dg/ipa/pr71207.C: New test. 2017-01-17 Martin Liska <mliska@suse.cz> PR ipa/71207 * ipa-polymorphic-call.c (contains_type_p): Fix wrong assumption and add comment. From-SVN: r244530
This commit is contained in:
parent
408de159d4
commit
4f197ff9a8
|
@ -1,3 +1,9 @@
|
|||
2017-01-17 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR ipa/71207
|
||||
* ipa-polymorphic-call.c (contains_type_p): Fix wrong
|
||||
assumption and add comment.
|
||||
|
||||
2017-01-17 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* ipa-visibility.c (localize_node): New function, broken out of ...
|
||||
|
|
|
@ -463,12 +463,12 @@ 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);
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2017-01-17 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR ipa/71207
|
||||
* g++.dg/ipa/pr71207.C: New test.
|
||||
|
||||
2017-01-17 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR middle-end/77445
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue