diff -Nrcpad gcc-4.6.0/gcc/ada/ChangeLog gcc-4.6.1/gcc/ada/ChangeLog *** gcc-4.6.0/gcc/ada/ChangeLog Fri Mar 25 16:54:59 2011 --- gcc-4.6.1/gcc/ada/ChangeLog Mon Jun 27 10:03:04 2011 *************** *** 1,3 **** --- 1,26 ---- + 2011-06-27 Release Manager + + * GCC 4.6.1 released. + + 2011-06-18 Eric Botcazou + + * gcc-interface/trans.c (Identifier_to_gnu): Don't set TREE_THIS_NOTRAP + on a dereference built for a by-ref object if it has an address clause. + + 2011-05-05 Eric Botcazou + + PR ada/48844 + * gcc-interface/gigi.h (get_variant_part): Declare. + * gcc-interface/decl.c (get_variant_part): Make global. + * gcc-interface/utils2.c (find_common_type): Do not return T1 if the + types have the same constant size, are record types and T1 has a + variant part while T2 doesn't. + + 2011-04-17 Eric Botcazou + + * gcc-interface/Make-lang.in (gnatbind): Replace $(ALL_CFLAGS) with + $(CFLAGS) on the link line. + 2011-03-25 Release Manager * GCC 4.6.0 released. diff -Nrcpad gcc-4.6.0/gcc/ada/gcc-interface/Make-lang.in gcc-4.6.1/gcc/ada/gcc-interface/Make-lang.in *** gcc-4.6.0/gcc/ada/gcc-interface/Make-lang.in Wed Jan 26 11:53:51 2011 --- gcc-4.6.1/gcc/ada/gcc-interface/Make-lang.in Sun Apr 17 22:29:13 2011 *************** gnat1$(exeext): $(TARGET_ADA_SRCS) $(GNA *** 485,491 **** $(RM) stamp-gnatlib2-rts stamp-tools gnatbind$(exeext): ada/b_gnatb.o $(CONFIG_H) $(GNATBIND_OBJS) ! $(GCC_LINK) -o $@ ada/b_gnatb.o $(GNATBIND_OBJS) $(ALL_CFLAGS) $(LIBS) $(SYSLIBS) # use cross-gcc gnat-cross: force --- 485,491 ---- $(RM) stamp-gnatlib2-rts stamp-tools gnatbind$(exeext): ada/b_gnatb.o $(CONFIG_H) $(GNATBIND_OBJS) ! $(GCC_LINK) -o $@ ada/b_gnatb.o $(GNATBIND_OBJS) $(LIBS) $(SYSLIBS) $(CFLAGS) # use cross-gcc gnat-cross: force diff -Nrcpad gcc-4.6.0/gcc/ada/gcc-interface/decl.c gcc-4.6.1/gcc/ada/gcc-interface/decl.c *** gcc-4.6.0/gcc/ada/gcc-interface/decl.c Tue Jan 4 11:33:39 2011 --- gcc-4.6.1/gcc/ada/gcc-interface/decl.c Thu May 5 16:27:03 2011 *************** static void check_ok_for_atomic (tree, E *** 177,183 **** static tree create_field_decl_from (tree, tree, tree, tree, tree, VEC(subst_pair,heap) *); static tree get_rep_part (tree); - static tree get_variant_part (tree); static tree create_variant_part_from (tree, VEC(variant_desc,heap) *, tree, tree, VEC(subst_pair,heap) *); static void copy_and_substitute_in_size (tree, tree, VEC(subst_pair,heap) *); --- 177,182 ---- *************** get_rep_part (tree record_type) *** 8400,8406 **** /* Return the variant part of RECORD_TYPE, if any. Otherwise return NULL. */ ! static tree get_variant_part (tree record_type) { tree field; --- 8399,8405 ---- /* Return the variant part of RECORD_TYPE, if any. Otherwise return NULL. */ ! tree get_variant_part (tree record_type) { tree field; diff -Nrcpad gcc-4.6.0/gcc/ada/gcc-interface/gigi.h gcc-4.6.1/gcc/ada/gcc-interface/gigi.h *** gcc-4.6.0/gcc/ada/gcc-interface/gigi.h Thu Feb 3 13:19:38 2011 --- gcc-4.6.1/gcc/ada/gcc-interface/gigi.h Thu May 5 16:27:03 2011 *************** extern tree choices_to_gnu (tree operand *** 151,156 **** --- 151,159 ---- extern void annotate_object (Entity_Id gnat_entity, tree gnu_type, tree size, bool by_ref, bool by_double_ref); + /* Return the variant part of RECORD_TYPE, if any. Otherwise return NULL. */ + extern tree get_variant_part (tree record_type); + /* Given a type T, a FIELD_DECL F, and a replacement value R, return a new type with all size expressions that contain F updated by replacing F with R. If F is NULL_TREE, always make a new RECORD_TYPE, even if diff -Nrcpad gcc-4.6.0/gcc/ada/gcc-interface/trans.c gcc-4.6.1/gcc/ada/gcc-interface/trans.c *** gcc-4.6.0/gcc/ada/gcc-interface/trans.c Thu Feb 3 13:19:38 2011 --- gcc-4.6.1/gcc/ada/gcc-interface/trans.c Sat Jun 18 10:31:43 2011 *************** Identifier_to_gnu (Node_Id gnat_node, tr *** 1037,1043 **** else { gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_result); ! if (TREE_CODE (gnu_result) == INDIRECT_REF) TREE_THIS_NOTRAP (gnu_result) = 1; } --- 1037,1044 ---- else { gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_result); ! if (TREE_CODE (gnu_result) == INDIRECT_REF ! && No (Address_Clause (gnat_temp))) TREE_THIS_NOTRAP (gnu_result) = 1; } diff -Nrcpad gcc-4.6.0/gcc/ada/gcc-interface/utils2.c gcc-4.6.1/gcc/ada/gcc-interface/utils2.c *** gcc-4.6.0/gcc/ada/gcc-interface/utils2.c Thu Feb 3 13:19:38 2011 --- gcc-4.6.1/gcc/ada/gcc-interface/utils2.c Thu May 5 16:27:03 2011 *************** find_common_type (tree t1, tree t2) *** 193,207 **** calling into build_binary_op), some others are really expected and we have to be careful. */ ! /* We must prevent writing more than what the target may hold if this is for an assignment and the case of tagged types is handled in build_binary_op ! so use the lhs type if it is known to be smaller, or of constant size and ! the rhs type is not, whatever the modes. We also force t1 in case of constant size equality to minimize occurrences of view conversions on the ! lhs of assignments. */ if (TREE_CONSTANT (TYPE_SIZE (t1)) && (!TREE_CONSTANT (TYPE_SIZE (t2)) ! || !tree_int_cst_lt (TYPE_SIZE (t2), TYPE_SIZE (t1)))) return t1; /* Otherwise, if the lhs type is non-BLKmode, use it. Note that we know --- 193,213 ---- calling into build_binary_op), some others are really expected and we have to be careful. */ ! /* We must avoid writing more than what the target can hold if this is for an assignment and the case of tagged types is handled in build_binary_op ! so we use the lhs type if it is known to be smaller or of constant size ! and the rhs type is not, whatever the modes. We also force t1 in case of constant size equality to minimize occurrences of view conversions on the ! lhs of an assignment, except for the case of record types with a variant ! part on the lhs but not on the rhs to make the conversion simpler. */ if (TREE_CONSTANT (TYPE_SIZE (t1)) && (!TREE_CONSTANT (TYPE_SIZE (t2)) ! || tree_int_cst_lt (TYPE_SIZE (t1), TYPE_SIZE (t2)) ! || (TYPE_SIZE (t1) == TYPE_SIZE (t2) ! && !(TREE_CODE (t1) == RECORD_TYPE ! && TREE_CODE (t2) == RECORD_TYPE ! && get_variant_part (t1) != NULL_TREE ! && get_variant_part (t2) == NULL_TREE)))) return t1; /* Otherwise, if the lhs type is non-BLKmode, use it. Note that we know diff -Nrcpad gcc-4.6.0/gnattools/ChangeLog gcc-4.6.1/gnattools/ChangeLog *** gcc-4.6.0/gnattools/ChangeLog Fri Mar 25 16:55:34 2011 --- gcc-4.6.1/gnattools/ChangeLog Mon Jun 27 10:03:45 2011 *************** *** 1,3 **** --- 1,7 ---- + 2011-06-27 Release Manager + + * GCC 4.6.1 released. + 2011-03-25 Release Manager * GCC 4.6.0 released. diff -Nrcpad gcc-4.6.0/libada/ChangeLog gcc-4.6.1/libada/ChangeLog *** gcc-4.6.0/libada/ChangeLog Fri Mar 25 16:55:47 2011 --- gcc-4.6.1/libada/ChangeLog Mon Jun 27 10:03:58 2011 *************** *** 1,3 **** --- 1,7 ---- + 2011-06-27 Release Manager + + * GCC 4.6.1 released. + 2011-03-25 Release Manager * GCC 4.6.0 released.