diff -Nrcpad gcc-4.3.2/gcc/ada/ChangeLog gcc-4.3.3/gcc/ada/ChangeLog *** gcc-4.3.2/gcc/ada/ChangeLog Wed Aug 27 18:02:00 2008 --- gcc-4.3.3/gcc/ada/ChangeLog Sat Jan 24 10:15:46 2009 *************** *** 1,3 **** --- 1,46 ---- + 2009-01-24 Release Manager + + * GCC 4.3.3 released. + + 2009-01-11 Eric Botcazou + + * decl.c (gnat_to_gnu_entity) : Put the _Tag field + before any discriminants in the field list. + (components_to_record): Remove obsolete comment. + + 2008-12-04 Janis Johnson + + Backport from mainline: + 2008-10-18 Jakub Jelinek + Janis Johnson + + * Make-lang.in (check-ada-subtargets): Depend on + check-acats-subtargets and check-gnat-subtargets. + (check_acats_targets): New variable. + (check-acats-subtargets, check-acats%): New targets. + (check-acats): If -j is used and CHAPTERS is empty, run the testing + in multiple make goals, possibly parallel, and afterwards run + dg-extract-results.sh to merge the sum and log files. + + 2008-11-15 Bechir Zalila + Eric Botcazou + + PR ada/34289 + * lib.ads: (Enable_Switch_Storing): Declare. + * lib.adb: (Enable_Switch_Storing): New procedure. + * switch-c.adb (Scan_Front_End_Switches): Add support for -gnatea. + * make.adb: (Compile_Sources.Compile): Add -gnatea as first option. + (Display): Never display -gnatea + * lang-specs.h: If -gnatea is present, pass -gnatez. + + 2008-10-06 Eric Botcazou + + * utils.c (can_fold_for_view_convert_p): New predicate. + (unchecked_convert): Use it to disable problematic folding with + VIEW_CONVERT_EXPR in the general case. Always disable it for the + special VIEW_CONVERT_EXPR built for integral types and cope with + its addressability issues by preserving the first conversion. + 2008-08-27 Release Manager * GCC 4.3.2 released. diff -Nrcpad gcc-4.3.2/gcc/ada/Make-lang.in gcc-4.3.3/gcc/ada/Make-lang.in *** gcc-4.3.2/gcc/ada/Make-lang.in Wed Feb 6 21:51:24 2008 --- gcc-4.3.3/gcc/ada/Make-lang.in Thu Dec 4 23:00:19 2008 *************** ada.stagefeedback: stagefeedback-start *** 859,873 **** lang_checks += check-gnat check-ada: check-acats check-gnat ACATSDIR = $(TESTSUITEDIR)/ada/acats check-acats: ! test -d $(ACATSDIR) || mkdir -p $(ACATSDIR) testdir=`cd ${srcdir}/${ACATSDIR}; ${PWD_COMMAND}`; \ export testdir; cd $(ACATSDIR); $(SHELL) $${testdir}/run_acats $(CHAPTERS) ! .PHONY: check-acats # Bootstrapping targets for just GNAT - use the same stage directories --- 859,905 ---- lang_checks += check-gnat check-ada: check-acats check-gnat + check-ada-subtargets: check-acats-subtargets check-gnat-subtargets ACATSDIR = $(TESTSUITEDIR)/ada/acats + check_acats_targets = $(patsubst %,check-acats%, 0 1 2) + check-acats: ! @test -d $(ACATSDIR) || mkdir -p $(ACATSDIR); \ ! if [ -z "$(CHAPTERS)" ] && [ "$(filter -j, $(MFLAGS))" = "-j" ]; \ ! then \ ! $(MAKE) $(check_acats_targets); \ ! for idx in 0 1 2; do \ ! mv -f $(ACATSDIR)$$idx/acats.sum $(ACATSDIR)$$idx/acats.sum.sep; \ ! mv -f $(ACATSDIR)$$idx/acats.log $(ACATSDIR)$$idx/acats.log.sep; \ ! done; \ ! $(SHELL) $(srcdir)/../contrib/dg-extract-results.sh \ ! $(ACATSDIR)0/acats.sum.sep $(ACATSDIR)1/acats.sum.sep \ ! $(ACATSDIR)2/acats.sum.sep > $(ACATSDIR)/acats.sum; \ ! $(SHELL) $(srcdir)/../contrib/dg-extract-results.sh -L \ ! $(ACATSDIR)0/acats.log.sep $(ACATSDIR)1/acats.log.sep \ ! $(ACATSDIR)2/acats.log.sep > $(ACATSDIR)/acats.log; \ ! exit 0; \ ! fi; \ testdir=`cd ${srcdir}/${ACATSDIR}; ${PWD_COMMAND}`; \ export testdir; cd $(ACATSDIR); $(SHELL) $${testdir}/run_acats $(CHAPTERS) ! check-acats-subtargets: ! @echo $(check_acats_targets) ! ! # Parallelized check-acats ! $(check_acats_targets): check-acats%: ! test -d $(ACATSDIR)$* || mkdir -p $(ACATSDIR)$*; \ ! testdir=`cd ${srcdir}/${ACATSDIR} && ${PWD_COMMAND}`; \ ! case "$*" in \ ! 0) chapters="`cd $$testdir/tests; echo [a-b]* c[0-4]*`";; \ ! 1) chapters="`cd $$testdir/tests; echo c[5-9ab]*`";; \ ! 2) chapters="`cd $$testdir/tests; echo c[c-z]* [d-z]*`";; \ ! esac; \ ! export testdir; cd $(ACATSDIR)$* && $(SHELL) $${testdir}/run_acats $$chapters ! ! .PHONY: check-acats $(check_acats_targets) # Bootstrapping targets for just GNAT - use the same stage directories diff -Nrcpad gcc-4.3.2/gcc/ada/decl.c gcc-4.3.3/gcc/ada/decl.c *** gcc-4.3.2/gcc/ada/decl.c Mon Jun 9 09:42:56 2008 --- gcc-4.3.3/gcc/ada/decl.c Sun Jan 11 12:25:21 2009 *************** gnat_to_gnu_entity (Entity_Id gnat_entit *** 2845,2852 **** = DECL_DISCRIMINANT_NUMBER (gnu_old_field); TREE_THIS_VOLATILE (gnu_field) = TREE_THIS_VOLATILE (gnu_old_field); ! TREE_CHAIN (gnu_field) = gnu_field_list; ! gnu_field_list = gnu_field; save_gnu_tree (gnat_field, gnu_field, false); } --- 2845,2862 ---- = DECL_DISCRIMINANT_NUMBER (gnu_old_field); TREE_THIS_VOLATILE (gnu_field) = TREE_THIS_VOLATILE (gnu_old_field); ! ! /* To match the layout crafted in components_to_record, if ! this is the _Tag field, put it before any discriminants ! instead of after them as for all other fields. */ ! if (Chars (gnat_field) == Name_uTag) ! gnu_field_list = chainon (gnu_field_list, gnu_field); ! else ! { ! TREE_CHAIN (gnu_field) = gnu_field_list; ! gnu_field_list = gnu_field; ! } ! save_gnu_tree (gnat_field, gnu_field, false); } *************** components_to_record (tree gnu_record_ty *** 5966,5973 **** packed, definition); /* If this is the _Tag field, put it before any discriminants, ! instead of after them as is the case for all other fields. ! Ignore field of void type if only annotating. */ if (Chars (gnat_field) == Name_uTag) gnu_field_list = chainon (gnu_field_list, gnu_field); else --- 5976,5982 ---- packed, definition); /* If this is the _Tag field, put it before any discriminants, ! instead of after them as is the case for all other fields. */ if (Chars (gnat_field) == Name_uTag) gnu_field_list = chainon (gnu_field_list, gnu_field); else diff -Nrcpad gcc-4.3.2/gcc/ada/lang-specs.h gcc-4.3.3/gcc/ada/lang-specs.h *** gcc-4.3.2/gcc/ada/lang-specs.h Thu Nov 1 18:06:47 2007 --- gcc-4.3.3/gcc/ada/lang-specs.h Sat Nov 15 16:15:00 2008 *************** *** 35,41 **** gnat1 %{I*} %{k8:-gnatk8} %{w:-gnatws} %{!Q:-quiet} %{nostdinc*}\ %{nostdlib*}\ -dumpbase %{.adb:%b.adb}%{.ads:%b.ads}%{!.adb:%{!.ads:%b.ada}}\ ! %{O*} %{W*} %{w} %{p} %{pg:-p} %{a} %{f*} %{d*} %{g*&m*} " #if defined(TARGET_VXWORKS_RTP) "%{fRTS=rtp:-mrtp} " #endif --- 35,42 ---- gnat1 %{I*} %{k8:-gnatk8} %{w:-gnatws} %{!Q:-quiet} %{nostdinc*}\ %{nostdlib*}\ -dumpbase %{.adb:%b.adb}%{.ads:%b.ads}%{!.adb:%{!.ads:%b.ada}}\ ! %{O*} %{W*} %{w} %{p} %{pg:-p} %{a} %{f*} %{d*}\ ! %{gnatea:-gnatez} %{g*&m*} " #if defined(TARGET_VXWORKS_RTP) "%{fRTS=rtp:-mrtp} " #endif diff -Nrcpad gcc-4.3.2/gcc/ada/lib.adb gcc-4.3.3/gcc/ada/lib.adb *** gcc-4.3.2/gcc/ada/lib.adb Wed Sep 12 11:58:21 2007 --- gcc-4.3.3/gcc/ada/lib.adb Sat Nov 15 16:15:00 2008 *************** with Uname; use Uname; *** 49,55 **** package body Lib is Switch_Storing_Enabled : Boolean := True; ! -- Set to False by Disable_Switch_Storing ----------------------- -- Local Subprograms -- --- 49,55 ---- package body Lib is Switch_Storing_Enabled : Boolean := True; ! -- Controlled by Enable_Switch_Storing/Disable_Switch_Storing ----------------------- -- Local Subprograms -- *************** package body Lib is *** 423,428 **** --- 423,441 ---- return Compilation_Switches.Last; end Compilation_Switches_Last; + --------------------------- + -- Enable_Switch_Storing -- + --------------------------- + + procedure Enable_Switch_Storing is + begin + Switch_Storing_Enabled := True; + end Enable_Switch_Storing; + + ---------------------------- + -- Disable_Switch_Storing -- + ---------------------------- + procedure Disable_Switch_Storing is begin Switch_Storing_Enabled := False; diff -Nrcpad gcc-4.3.2/gcc/ada/lib.ads gcc-4.3.3/gcc/ada/lib.ads *** gcc-4.3.2/gcc/ada/lib.ads Thu Dec 13 10:40:58 2007 --- gcc-4.3.3/gcc/ada/lib.ads Sat Nov 15 16:15:00 2008 *************** package Lib is *** 556,564 **** -- which may influence the generated output file(s). Switch is the text of -- the switch to store (except that -fRTS gets changed back to --RTS). procedure Disable_Switch_Storing; -- Disable registration of switches by Store_Compilation_Switch. Used to ! -- avoid registering switches added automatically by the gcc driver. procedure Store_Linker_Option_String (S : String_Id); -- This procedure is called to register the string from a pragma --- 556,570 ---- -- which may influence the generated output file(s). Switch is the text of -- the switch to store (except that -fRTS gets changed back to --RTS). + procedure Enable_Switch_Storing; + -- Enable registration of switches by Store_Compilation_Switch. Used to + -- avoid registering switches added automatically by the gcc driver at the + -- beginning of the command line. + procedure Disable_Switch_Storing; -- Disable registration of switches by Store_Compilation_Switch. Used to ! -- avoid registering switches added automatically by the gcc driver at the ! -- end of the command line. procedure Store_Linker_Option_String (S : String_Id); -- This procedure is called to register the string from a pragma diff -Nrcpad gcc-4.3.2/gcc/ada/make.adb gcc-4.3.3/gcc/ada/make.adb *** gcc-4.3.2/gcc/ada/make.adb Thu Dec 13 10:45:44 2007 --- gcc-4.3.3/gcc/ada/make.adb Sat Nov 15 16:15:00 2008 *************** package body Make is *** 2893,2899 **** Source_Index : Int; Args : Argument_List) return Process_Id is ! Comp_Args : Argument_List (Args'First .. Args'Last + 9); Comp_Next : Integer := Args'First; Comp_Last : Integer; Arg_Index : Integer; --- 2893,2899 ---- Source_Index : Int; Args : Argument_List) return Process_Id is ! Comp_Args : Argument_List (Args'First .. Args'Last + 10); Comp_Next : Integer := Args'First; Comp_Last : Integer; Arg_Index : Integer; *************** package body Make is *** 2950,2955 **** --- 2950,2958 ---- end if; end loop; + Comp_Args (Comp_Next) := new String'("-gnatea"); + Comp_Next := Comp_Next + 1; + Comp_Args (Comp_Next) := Comp_Flag; Comp_Next := Comp_Next + 1; *************** package body Make is *** 4032,4040 **** for J in Args'Range loop ! -- Never display -gnatez ! if Args (J).all /= "-gnatez" then -- Do not display the mapping file argument automatically -- created when using a project file. --- 4035,4045 ---- for J in Args'Range loop ! -- Never display -gnatea nor -gnatez ! if Args (J).all /= "-gnatea" and then ! Args (J).all /= "-gnatez" ! then -- Do not display the mapping file argument automatically -- created when using a project file. diff -Nrcpad gcc-4.3.2/gcc/ada/switch-c.adb gcc-4.3.3/gcc/ada/switch-c.adb *** gcc-4.3.2/gcc/ada/switch-c.adb Thu Dec 13 10:20:52 2007 --- gcc-4.3.3/gcc/ada/switch-c.adb Sat Nov 15 16:15:00 2008 *************** package body Switch.C is *** 295,300 **** --- 295,305 ---- case Switch_Chars (Ptr) is + when 'a' => + Store_Switch := False; + Enable_Switch_Storing; + Ptr := Ptr + 1; + -- -gnatec (configuration pragmas) when 'c' => diff -Nrcpad gcc-4.3.2/gcc/ada/utils.c gcc-4.3.3/gcc/ada/utils.c *** gcc-4.3.2/gcc/ada/utils.c Tue May 13 08:46:49 2008 --- gcc-4.3.3/gcc/ada/utils.c Mon Oct 6 07:10:31 2008 *************** maybe_unconstrained_array (tree exp) *** 3824,3831 **** return exp; } /* Return an expression that does an unchecked conversion of EXPR to TYPE. ! If NOTRUNC_P is true, truncation operations should be suppressed. */ tree unchecked_convert (tree type, tree expr, bool notrunc_p) --- 3824,3895 ---- return exp; } + /* Return true if EXPR is an expression that can be folded as an operand + of a VIEW_CONVERT_EXPR. See the head comment of unchecked_convert for + the rationale. */ + + static bool + can_fold_for_view_convert_p (tree expr) + { + tree t1, t2; + + /* The folder will fold NOP_EXPRs between integral types with the same + precision (in the middle-end's sense). We cannot allow it if the + types don't have the same precision in the Ada sense as well. */ + if (TREE_CODE (expr) != NOP_EXPR) + return true; + + t1 = TREE_TYPE (expr); + t2 = TREE_TYPE (TREE_OPERAND (expr, 0)); + + /* Defer to the folder for non-integral conversions. */ + if (!(INTEGRAL_TYPE_P (t1) && INTEGRAL_TYPE_P (t2))) + return true; + + /* Only fold conversions that preserve both precisions. */ + if (TYPE_PRECISION (t1) == TYPE_PRECISION (t2) + && operand_equal_p (rm_size (t1), rm_size (t2), 0)) + return true; + + return false; + } + /* Return an expression that does an unchecked conversion of EXPR to TYPE. ! If NOTRUNC_P is true, truncation operations should be suppressed. ! ! Special care is required with (source or target) integral types whose ! precision is not equal to their size, to make sure we fetch or assign ! the value bits whose location might depend on the endianness, e.g. ! ! Rmsize : constant := 8; ! subtype Int is Integer range 0 .. 2 ** Rmsize - 1; ! ! type Bit_Array is array (1 .. Rmsize) of Boolean; ! pragma Pack (Bit_Array); ! ! function To_Bit_Array is new Unchecked_Conversion (Int, Bit_Array); ! ! Value : Int := 2#1000_0001#; ! Vbits : Bit_Array := To_Bit_Array (Value); ! ! we expect the 8 bits at Vbits'Address to always contain Value, while ! their original location depends on the endianness, at Value'Address ! on a little-endian architecture but not on a big-endian one. ! ! ??? There is a problematic discrepancy between what is called precision ! here (and more generally throughout gigi) for integral types and what is ! called precision in the middle-end. In the former case it's the RM size ! as given by TYPE_RM_SIZE (or rm_size) whereas it's TYPE_PRECISION in the ! latter case, the hitch being that they are not equal when they matter, ! that is when the number of value bits is not equal to the type's size: ! TYPE_RM_SIZE does give the number of value bits but TYPE_PRECISION is set ! to the size. The sole exception are BOOLEAN_TYPEs for which both are 1. ! ! The consequence is that gigi must duplicate code bridging the gap between ! the type's size and its precision that exists for TYPE_PRECISION in the ! middle-end, because the latter knows nothing about TYPE_RM_SIZE, and be ! wary of transformations applied in the middle-end based on TYPE_PRECISION ! because this value doesn't reflect the actual precision for Ada. */ tree unchecked_convert (tree type, tree expr, bool notrunc_p) *************** unchecked_convert (tree type, tree expr, *** 3852,3865 **** && TYPE_JUSTIFIED_MODULAR_P (etype)))) || TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE) { - tree rtype = type; - bool final_unchecked = false; - if (TREE_CODE (etype) == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (etype)) { tree ntype = copy_type (etype); - TYPE_BIASED_REPRESENTATION_P (ntype) = 0; TYPE_MAIN_VARIANT (ntype) = ntype; expr = build1 (NOP_EXPR, ntype, expr); --- 3916,3925 ---- *************** unchecked_convert (tree type, tree expr, *** 3868,3882 **** if (TREE_CODE (type) == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (type)) { ! rtype = copy_type (type); TYPE_BIASED_REPRESENTATION_P (rtype) = 0; TYPE_MAIN_VARIANT (rtype) = rtype; } ! /* We have another special case: if we are unchecked converting subtype ! into a base type, we need to ensure that VRP doesn't propagate range ! information since this conversion may be done precisely to validate ! that the object is within the range it is supposed to have. */ else if (TREE_CODE (expr) != INTEGER_CST && TREE_CODE (type) == INTEGER_TYPE && !TREE_TYPE (type) && ((TREE_CODE (etype) == INTEGER_TYPE && TREE_TYPE (etype)) --- 3928,3945 ---- if (TREE_CODE (type) == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (type)) { ! tree rtype = copy_type (type); TYPE_BIASED_REPRESENTATION_P (rtype) = 0; TYPE_MAIN_VARIANT (rtype) = rtype; + expr = convert (rtype, expr); + expr = build1 (NOP_EXPR, type, expr); } ! /* We have another special case: if we are unchecked converting either ! a subtype or a type with limited range into a base type, we need to ! ensure that VRP doesn't propagate range information because this ! conversion may be done precisely to validate that the object is ! within the range it is supposed to have. */ else if (TREE_CODE (expr) != INTEGER_CST && TREE_CODE (type) == INTEGER_TYPE && !TREE_TYPE (type) && ((TREE_CODE (etype) == INTEGER_TYPE && TREE_TYPE (etype)) *************** unchecked_convert (tree type, tree expr, *** 3887,3912 **** in order not to be deemed an useless type conversion, it must be from subtype to base type. ??? This may raise addressability and/or aliasing issues because VIEW_CONVERT_EXPR gets gimplified as an lvalue, thus causing the address of its operand to be taken if it is deemed addressable and not already in GIMPLE form. */ ! rtype = gnat_type_for_mode (TYPE_MODE (type), TYPE_UNSIGNED (type)); rtype = copy_type (rtype); TYPE_MAIN_VARIANT (rtype) = rtype; TREE_TYPE (rtype) = type; ! final_unchecked = true; } ! expr = convert (rtype, expr); ! if (type != rtype) ! expr = fold_build1 (final_unchecked ? VIEW_CONVERT_EXPR : NOP_EXPR, ! type, expr); } ! /* If we are converting TO an integral type whose precision is not the ! same as its size, first unchecked convert to a record that contains ! an object of the output type. Then extract the field. */ else if (INTEGRAL_TYPE_P (type) && TYPE_RM_SIZE (type) && 0 != compare_tree_int (TYPE_RM_SIZE (type), GET_MODE_BITSIZE (TYPE_MODE (type)))) --- 3950,3983 ---- in order not to be deemed an useless type conversion, it must be from subtype to base type. + Therefore we first do the bulk of the conversion to a subtype of + the final type. And this conversion must itself not be deemed + useless if the source type is not a subtype because, otherwise, + the final VIEW_CONVERT_EXPR will be deemed so as well. That's + why we toggle the unsigned flag in this conversion, which is + harmless since the final conversion is only a reinterpretation + of the bit pattern. + ??? This may raise addressability and/or aliasing issues because VIEW_CONVERT_EXPR gets gimplified as an lvalue, thus causing the address of its operand to be taken if it is deemed addressable and not already in GIMPLE form. */ ! tree rtype ! = gnat_type_for_mode (TYPE_MODE (type), !TYPE_UNSIGNED (etype)); rtype = copy_type (rtype); TYPE_MAIN_VARIANT (rtype) = rtype; TREE_TYPE (rtype) = type; ! expr = convert (rtype, expr); ! expr = build1 (VIEW_CONVERT_EXPR, type, expr); } ! else ! expr = convert (type, expr); } ! /* If we are converting to an integral type whose precision is not equal ! to its size, first unchecked convert to a record that contains an ! object of the output type. Then extract the field. */ else if (INTEGRAL_TYPE_P (type) && TYPE_RM_SIZE (type) && 0 != compare_tree_int (TYPE_RM_SIZE (type), GET_MODE_BITSIZE (TYPE_MODE (type)))) *************** unchecked_convert (tree type, tree expr, *** 3922,3929 **** expr = build_component_ref (expr, NULL_TREE, field, 0); } ! /* Similarly for integral input type whose precision is not equal to its ! size. */ else if (INTEGRAL_TYPE_P (etype) && TYPE_RM_SIZE (etype) && 0 != compare_tree_int (TYPE_RM_SIZE (etype), GET_MODE_BITSIZE (TYPE_MODE (etype)))) --- 3993,4000 ---- expr = build_component_ref (expr, NULL_TREE, field, 0); } ! /* Similarly if we are converting from an integral type whose precision ! is not equal to its size. */ else if (INTEGRAL_TYPE_P (etype) && TYPE_RM_SIZE (etype) && 0 != compare_tree_int (TYPE_RM_SIZE (etype), GET_MODE_BITSIZE (TYPE_MODE (etype)))) *************** unchecked_convert (tree type, tree expr, *** 3953,3965 **** { expr = maybe_unconstrained_array (expr); etype = TREE_TYPE (expr); ! expr = fold_build1 (VIEW_CONVERT_EXPR, type, expr); } ! /* If the result is an integral type whose size is not equal to ! the size of the underlying machine type, sign- or zero-extend ! the result. We need not do this in the case where the input is ! an integral type of the same precision and signedness or if the output is a biased type or if both the input and output are unsigned. */ if (!notrunc_p && INTEGRAL_TYPE_P (type) && TYPE_RM_SIZE (type) --- 4024,4038 ---- { expr = maybe_unconstrained_array (expr); etype = TREE_TYPE (expr); ! if (can_fold_for_view_convert_p (expr)) ! expr = fold_build1 (VIEW_CONVERT_EXPR, type, expr); ! else ! expr = build1 (VIEW_CONVERT_EXPR, type, expr); } ! /* If the result is an integral type whose precision is not equal to its ! size, sign- or zero-extend the result. We need not do this if the input ! is an integral type of the same precision and signedness or if the output is a biased type or if both the input and output are unsigned. */ if (!notrunc_p && INTEGRAL_TYPE_P (type) && TYPE_RM_SIZE (type) diff -Nrcpad gcc-4.3.2/gnattools/ChangeLog gcc-4.3.3/gnattools/ChangeLog *** gcc-4.3.2/gnattools/ChangeLog Wed Aug 27 18:04:07 2008 --- gcc-4.3.3/gnattools/ChangeLog Sat Jan 24 10:18:34 2009 *************** *** 1,3 **** --- 1,7 ---- + 2009-01-24 Release Manager + + * GCC 4.3.3 released. + 2008-08-27 Release Manager * GCC 4.3.2 released. diff -Nrcpad gcc-4.3.2/libada/ChangeLog gcc-4.3.3/libada/ChangeLog *** gcc-4.3.2/libada/ChangeLog Wed Aug 27 18:03:40 2008 --- gcc-4.3.3/libada/ChangeLog Sat Jan 24 10:16:53 2009 *************** *** 1,3 **** --- 1,7 ---- + 2009-01-24 Release Manager + + * GCC 4.3.3 released. + 2008-08-27 Release Manager * GCC 4.3.2 released.