This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[objc++] Fix code setting binfo

this patch fixes similar bug as in ipa-devirt.  objc_xref_basetypes is used when
building obj-C++ structure.  The structure always contains self-reference that
builds type variant early.  The variant's binfo is one assigned by
C++ FE's version of xref_basetypes, while the main variant gets overwritten
here.  Fixed thus.


Bootstrapped/regtested x86_64-linux, comitted.

	* objc-act.c (objc_xref_basetypes): Set TYPE_BINFO of type variants,
Index: objc-act.c
--- objc-act.c	(revision 212098)
+++ objc-act.c	(working copy)
@@ -2695,12 +2695,16 @@ objc_copy_binfo (tree binfo)
 static void
 objc_xref_basetypes (tree ref, tree basetype)
+  tree variant;
   tree binfo = make_tree_binfo (basetype ? 1 : 0);
   TYPE_BINFO (ref) = binfo;
   BINFO_OFFSET (binfo) = size_zero_node;
   BINFO_TYPE (binfo) = ref;
+  gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
+  for (variant = ref; variant; variant = TYPE_NEXT_VARIANT (variant))
+    TYPE_BINFO (variant) = binfo;
   if (basetype)
       tree base_binfo = objc_copy_binfo (TYPE_BINFO (basetype));

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]