[PR ipa/71981] Make get_dynamic_type grok MEM_REF

2016-08-09  Martin Jambor  <mjambor@suse.cz>

        PR ipa/71981
        * ipa-polymorphic-call.c (get_dynamic_type): Bail out gracefully
        if instance is a MEM_REF.

testsuite/
        PR ipa/71981
        * gcc.dg/ipa/pr71981.c: New test.

From-SVN: r239294
This commit is contained in:
Martin Jambor 2016-08-09 18:05:30 +02:00 committed by Martin Jambor
parent 045f240b97
commit 04d6d3b6d7
4 changed files with 26 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2016-08-09 Martin Jambor <mjambor@suse.cz>
PR ipa/71981
* ipa-polymorphic-call.c (get_dynamic_type): Bail out gracefully
if instance is a MEM_REF.
2016-08-09 Uros Bizjak <ubizjak@gmail.com>
PR target/72843

View File

@ -1544,6 +1544,11 @@ ipa_polymorphic_call_context::get_dynamic_type (tree instance,
if (!maybe_in_construction && !maybe_derived_type)
return false;
/* If we are in fact not looking at any object object or the instance is
some placement new into a random load, give up straight away. */
if (TREE_CODE (instance) == MEM_REF)
return false;
/* We need to obtain refernce to virtual table pointer. It is better
to look it up in the code rather than build our own. This require bit
of pattern matching, but we end up verifying that what we found is
@ -1664,7 +1669,6 @@ ipa_polymorphic_call_context::get_dynamic_type (tree instance,
tci.offset = instance_offset;
tci.instance = instance;
tci.vtbl_ptr_ref = instance_ref;
gcc_assert (TREE_CODE (instance) != MEM_REF);
tci.known_current_type = NULL_TREE;
tci.known_current_offset = 0;
tci.otr_type = otr_type;

View File

@ -1,3 +1,8 @@
2016-08-09 Martin Jambor <mjambor@suse.cz>
PR ipa/71981
* gcc.dg/ipa/pr71981.c: New test.
2016-08-09 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/33707

View File

@ -0,0 +1,10 @@
/* { dg-do compile } */
/* { dg-options "-O2 -w" } */
int **a;
static void fn1(char **p1) {
char s = *p1, b = &s;
while (*fn2()[a])
;
}
int main() { fn1(""); return 0; }