From: Roger Sayle Date: Mon, 13 Nov 2006 23:28:25 +0000 (+0000) Subject: rtti.c (get_pseudo_ti_init): Ensure that the offset field of the base type info initi... X-Git-Tag: releases/gcc-4.3.0~8482 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=07b183fda97ea74e5de935b4142834b58fb48fa7;p=thirdparty%2Fgcc.git rtti.c (get_pseudo_ti_init): Ensure that the offset field of the base type info initializer has the correct type. * rtti.c (get_pseudo_ti_init): Ensure that the offset field of the base type info initializer has the correct type. From-SVN: r118785 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ecd9bac15268..25e444cc921f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2006-11-13 Roger Sayle + + * rtti.c (get_pseudo_ti_init): Ensure that the offset field of the + base type info initializer has the correct type. + 2006-11-13 Mark Mitchell PR c++/29518 diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c index 077d3e0b6942..02272e84ee3b 100644 --- a/gcc/cp/rtti.c +++ b/gcc/cp/rtti.c @@ -1037,6 +1037,7 @@ get_pseudo_ti_init (tree type, unsigned tk_index) tree binfo = TYPE_BINFO (type); int nbases = BINFO_N_BASE_BINFOS (binfo); VEC(tree,gc) *base_accesses = BINFO_BASE_ACCESSES (binfo); + tree offset_type = integer_types[itk_long]; tree base_inits = NULL_TREE; int ix; @@ -1059,17 +1060,17 @@ get_pseudo_ti_init (tree type, unsigned tk_index) /* We store the vtable offset at which the virtual base offset can be found. */ offset = BINFO_VPTR_FIELD (base_binfo); - offset = convert (sizetype, offset); flags |= 1; } else offset = BINFO_OFFSET (base_binfo); /* Combine offset and flags into one field. */ - offset = cp_build_binary_op (LSHIFT_EXPR, offset, - build_int_cst (NULL_TREE, 8)); - offset = cp_build_binary_op (BIT_IOR_EXPR, offset, - build_int_cst (NULL_TREE, flags)); + offset = fold_convert (offset_type, offset); + offset = fold_build2 (LSHIFT_EXPR, offset_type, offset, + build_int_cst (offset_type, 8)); + offset = fold_build2 (BIT_IOR_EXPR, offset_type, offset, + build_int_cst (offset_type, flags)); base_init = tree_cons (NULL_TREE, offset, base_init); base_init = tree_cons (NULL_TREE, tinfo, base_init); base_init = build_constructor_from_list (NULL_TREE, base_init);