Hi,
I forgot the following change in my tree.  It fixes type consistency sanity
check in get_polymorphic_call_info.  With the change to gimple-fold it is
now needed to devrirtualize devirt2.C. (previously the bug went latent since
the old code handled the testcase)

I am re-testing x86_64-linux and will commit it shortly.  I apologize for
breaking the testcase.

Honza

        * ipa-devirt.c (get_polymorphic_call_info): Fix offset when
        checking type consistency; do not set bogus outer_type
        when check fails.

Index: ipa-devirt.c
===================================================================
--- ipa-devirt.c        (revision 206040)
+++ ipa-devirt.c        (working copy)
@@ -982,23 +982,22 @@ get_polymorphic_call_info (tree fndecl,
                 is known.  */
              else if (DECL_P (base))
                {
-                 context->outer_type = TREE_TYPE (base);
                  gcc_assert (!POINTER_TYPE_P (context->outer_type));
 
                  /* Only type inconsistent programs can have otr_type that is
                     not part of outer type.  */
-                 if (!contains_type_p (context->outer_type,
-                                       context->offset, *otr_type))
+                 if (!contains_type_p (TREE_TYPE (base),
+                                       context->offset + offset2, *otr_type))
                    return base_pointer;
+                 context->outer_type = TREE_TYPE (base);
                  context->offset += offset2;
-                 base_pointer = NULL;
                  /* Make very conservative assumption that all objects
                     may be in construction. 
                     TODO: ipa-prop already contains code to tell better. 
                     merge it later.  */
                  context->maybe_in_construction = true;
                  context->maybe_derived_type = false;
-                 return base_pointer;
+                 return NULL;
                }
              else
                break;

Reply via email to