From d5e4370952347addc29a86f8de63f1f7606bd26c Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 13 Mar 2009 15:22:25 +0000 Subject: [PATCH] 4.4.0-0.25 --- .cvsignore | 2 +- gcc.spec | 30 +++++--- gcc44-pr39412.patch | 170 ++++++++++++++++++++++++++++++++++++++++++++ gcc44-pr39443.patch | 131 ++++++++++++++++++++++++++++++++++ gcc44-pr39454.patch | 74 +++++++++++++++++++ sources | 2 +- 6 files changed, 397 insertions(+), 12 deletions(-) create mode 100644 gcc44-pr39412.patch create mode 100644 gcc44-pr39443.patch create mode 100644 gcc44-pr39454.patch diff --git a/.cvsignore b/.cvsignore index 234ab48..61aad16 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ fastjar-0.97.tar.gz -gcc-4.4.0-20090310.tar.bz2 +gcc-4.4.0-20090313.tar.bz2 diff --git a/gcc.spec b/gcc.spec index 2def515..c5cd968 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,9 +1,9 @@ -%define DATE 20090310 -%define SVNREV 144741 +%define DATE 20090313 +%define SVNREV 144837 %define gcc_version 4.4.0 # Note, gcc_release must be integer, if you want to add suffixes to # %{release}, append them after %{gcc_release} on Release: line. -%define gcc_release 0.24 +%define gcc_release 0.25 %define _unpackaged_files_terminate_build 0 %define multilib_64_archs sparc64 ppc64 s390x x86_64 %define include_gappletviewer 1 @@ -152,6 +152,9 @@ Patch22: gcc44-raw-string.patch Patch24: gcc44-atom.patch Patch25: gcc44-pr39226.patch Patch26: gcc44-power7.patch +Patch27: gcc44-pr39412.patch +Patch28: gcc44-pr39443.patch +Patch29: gcc44-pr39454.patch Patch1000: fastjar-0.97-segfault.patch @@ -441,6 +444,9 @@ which are required to compile with the GNAT. %patch24 -p0 -b .atom~ %patch25 -p0 -b .pr39226~ %patch26 -p0 -b .power7~ +%patch27 -p0 -b .pr39412~ +%patch28 -p0 -b .pr39443~ +%patch29 -p0 -b .pr39454~ # This testcase doesn't compile. rm libjava/testsuite/libjava.lang/PR35020* @@ -631,11 +637,7 @@ CC="$CC" CFLAGS="$OPT_FLAGS" CXXFLAGS="`echo $OPT_FLAGS | sed 's/ -Wall / /g'`" %endif #GCJFLAGS="$OPT_FLAGS" make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" bootstrap -%ifarch sparcv9 -GCJFLAGS="$OPT_FLAGS" make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" bootstrap -%else GCJFLAGS="$OPT_FLAGS" make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" profiledbootstrap -%endif # run the tests. make %{?_smp_mflags} -k check ALT_CC_UNDER_TEST=gcc ALT_CXX_UNDER_TEST=g++ RUNTESTFLAGS="--target_board=unix/'{,-fstack-protector}'" || : @@ -1755,10 +1757,18 @@ fi %doc rpm.doc/changelogs/libmudflap/ChangeLog* %changelog +* Fri Mar 13 2009 Jakub Jelinek 4.4.0-0.25 +- update from trunk + - PRs debug/39086, debug/39432, libobjc/27466, middle-end/37850, + target/39137, target/39181, target/39431, target/39445, target/5362, + testsuite/39451, tree-optimization/39422 +- fix ICE in gen_tagged_type_instantiation_die (#489308, PR debug/39412) +- fix memcmp builtin asm redirection (PR middle-end/39443) +- fix sparcv9 profiledbootstrap (PR bootstrap/39454) + * Thu Mar 12 2009 Dennis Gilmore -- don't build cloog support on sparc arches -- missing some deps still -- build sparcv9 with bootstrap not profiledbootstrap +- don't build with graphite support on sparc arches + - still missing some deps * Tue Mar 10 2009 Jakub Jelinek 4.4.0-0.24 - update from trunk diff --git a/gcc44-pr39412.patch b/gcc44-pr39412.patch new file mode 100644 index 0000000..f45c3ea --- /dev/null +++ b/gcc44-pr39412.patch @@ -0,0 +1,170 @@ +2009-03-11 Jakub Jelinek + + PR debug/39412 + * dwarf2out.c (gen_inlined_enumeration_type_die, + gen_inlined_structure_type_die, gen_inlined_union_type_die, + gen_tagged_type_instantiation_die): Removed. + (gen_decl_die): For TYPE_DECL_IS_STUB with non-NULL decl_origin + do nothing. + + * gcc.dg/debug/pr39412.c: New test. + +--- gcc/dwarf2out.c.jj 2009-03-09 11:38:55.000000000 +0100 ++++ gcc/dwarf2out.c 2009-03-11 11:12:02.000000000 +0100 +@@ -5149,9 +5149,6 @@ static void gen_descr_array_type_die (tr + #if 0 + static void gen_entry_point_die (tree, dw_die_ref); + #endif +-static void gen_inlined_enumeration_type_die (tree, dw_die_ref); +-static void gen_inlined_structure_type_die (tree, dw_die_ref); +-static void gen_inlined_union_type_die (tree, dw_die_ref); + static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref); + static dw_die_ref gen_formal_parameter_die (tree, tree, dw_die_ref); + static void gen_unspecified_parameters_die (tree, dw_die_ref); +@@ -5172,7 +5169,6 @@ static void gen_struct_or_union_type_die + static void gen_subroutine_type_die (tree, dw_die_ref); + static void gen_typedef_die (tree, dw_die_ref); + static void gen_type_die (tree, dw_die_ref); +-static void gen_tagged_type_instantiation_die (tree, dw_die_ref); + static void gen_block_die (tree, dw_die_ref, int); + static void decls_for_scope (tree, dw_die_ref, int); + static int is_redundant_typedef (const_tree); +@@ -13149,18 +13145,6 @@ retry_incomplete_types (void) + gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die); + } + +-/* Generate a DIE to represent an inlined instance of an enumeration type. */ +- +-static void +-gen_inlined_enumeration_type_die (tree type, dw_die_ref context_die) +-{ +- dw_die_ref type_die = new_die (DW_TAG_enumeration_type, context_die, type); +- +- /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may +- be incomplete and such types are not marked. */ +- add_abstract_origin_attribute (type_die, type); +-} +- + /* Determine what tag to use for a record type. */ + + static enum dwarf_tag +@@ -13185,30 +13169,6 @@ record_type_tag (tree type) + } + } + +-/* Generate a DIE to represent an inlined instance of a structure type. */ +- +-static void +-gen_inlined_structure_type_die (tree type, dw_die_ref context_die) +-{ +- dw_die_ref type_die = new_die (record_type_tag (type), context_die, type); +- +- /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may +- be incomplete and such types are not marked. */ +- add_abstract_origin_attribute (type_die, type); +-} +- +-/* Generate a DIE to represent an inlined instance of a union type. */ +- +-static void +-gen_inlined_union_type_die (tree type, dw_die_ref context_die) +-{ +- dw_die_ref type_die = new_die (DW_TAG_union_type, context_die, type); +- +- /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may +- be incomplete and such types are not marked. */ +- add_abstract_origin_attribute (type_die, type); +-} +- + /* Generate a DIE to represent an enumeration type. Note that these DIEs + include all of the information about the enumeration values also. Each + enumerated type name/value is listed as a child of the enumerated type +@@ -14835,46 +14795,6 @@ gen_type_die (tree type, dw_die_ref cont + gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE); + } + +-/* Generate a DIE for a tagged type instantiation. */ +- +-static void +-gen_tagged_type_instantiation_die (tree type, dw_die_ref context_die) +-{ +- if (type == NULL_TREE || type == error_mark_node) +- return; +- +- /* We are going to output a DIE to represent the unqualified version of +- this type (i.e. without any const or volatile qualifiers) so make sure +- that we have the main variant (i.e. the unqualified version) of this +- type now. */ +- gcc_assert (type == type_main_variant (type)); +- +- /* Do not check TREE_ASM_WRITTEN (type) as it may not be set if this is +- an instance of an unresolved type. */ +- +- switch (TREE_CODE (type)) +- { +- case ERROR_MARK: +- break; +- +- case ENUMERAL_TYPE: +- gen_inlined_enumeration_type_die (type, context_die); +- break; +- +- case RECORD_TYPE: +- gen_inlined_structure_type_die (type, context_die); +- break; +- +- case UNION_TYPE: +- case QUAL_UNION_TYPE: +- gen_inlined_union_type_die (type, context_die); +- break; +- +- default: +- gcc_unreachable (); +- } +-} +- + /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the + things which are local to the given block. */ + +@@ -15315,14 +15235,14 @@ gen_decl_die (tree decl, tree origin, dw + of some type tag, if the given TYPE_DECL is marked as having been + instantiated from some other (original) TYPE_DECL node (e.g. one which + was generated within the original definition of an inline function) we +- have to generate a special (abbreviated) DW_TAG_structure_type, +- DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. */ +- if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE +- && is_tagged_type (TREE_TYPE (decl))) +- { +- gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die); +- break; +- } ++ used to generate a special (abbreviated) DW_TAG_structure_type, ++ DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. But nothing ++ should be actually referencing those DIEs, as variable DIEs with that ++ type would be emitted already in the abstract origin, so it was always ++ removed during unused type prunning. Don't add anything in this ++ case. */ ++ if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE) ++ break; + + if (is_redundant_typedef (decl)) + gen_type_die (TREE_TYPE (decl), context_die); +--- gcc/testsuite/gcc.dg/debug/pr39412.c.jj 2009-03-11 11:14:32.000000000 +0100 ++++ gcc/testsuite/gcc.dg/debug/pr39412.c 2009-03-11 11:14:39.000000000 +0100 +@@ -0,0 +1,16 @@ ++/* PR debug/39412 */ ++/* { dg-do compile } */ ++ ++struct S { int i; }; ++ ++inline void ++bar (const void *x, unsigned long y) ++{ ++ const union { struct S a[y]; } *u = x; ++} ++ ++void ++foo (const void *x, unsigned long y) ++{ ++ bar (x, y); ++} diff --git a/gcc44-pr39443.patch b/gcc44-pr39443.patch new file mode 100644 index 0000000..e16aa7e --- /dev/null +++ b/gcc44-pr39443.patch @@ -0,0 +1,131 @@ +2009-03-12 Jakub Jelinek + + PR middle-end/39443 + * optabs.c (set_user_assembler_libfunc): New function. + * expr.h (set_user_assembler_libfunc): New prototype. + * c-common.c: Include libfuncs.h. + (set_builtin_user_assembler_name): Call set_user_assembler_libfunc + for memcmp, memset, memcpy, memmove and abort. + + * gcc.dg/pr39443.c: New test. + +--- gcc/optabs.c.jj 2008-11-18 19:24:09.000000000 +0100 ++++ gcc/optabs.c 2009-03-12 16:16:56.000000000 +0100 +@@ -6072,6 +6072,24 @@ init_one_libfunc (const char *name) + return XEXP (DECL_RTL (decl), 0); + } + ++/* Adjust the assembler name of libfunc NAME to ASMSPEC. */ ++ ++rtx ++set_user_assembler_libfunc (const char *name, const char *asmspec) ++{ ++ tree id, decl; ++ void **slot; ++ hashval_t hash; ++ ++ id = get_identifier (name); ++ hash = htab_hash_string (name); ++ slot = htab_find_slot_with_hash (libfunc_decls, id, hash, INSERT); ++ decl = (tree) *slot; ++ gcc_assert (decl); ++ set_user_assembler_name (decl, asmspec); ++ return XEXP (DECL_RTL (decl), 0); ++} ++ + /* Call this to reset the function entry for one optab (OPTABLE) in mode + MODE to NAME, which should be either 0 or a string constant. */ + void +--- gcc/expr.h.jj 2009-02-20 15:33:46.000000000 +0100 ++++ gcc/expr.h 2009-03-12 16:17:41.000000000 +0100 +@@ -1,6 +1,6 @@ + /* Definitions for code generation pass of GNU compiler. + Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, +- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 ++ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + + This file is part of GCC. +@@ -786,6 +786,7 @@ extern void init_all_optabs (void); + + /* Call this to initialize an optab function entry. */ + extern rtx init_one_libfunc (const char *); ++extern rtx set_user_assembler_libfunc (const char *, const char *); + + extern int vector_mode_valid_p (enum machine_mode); + +--- gcc/c-common.c.jj 2009-03-02 09:45:47.000000000 +0100 ++++ gcc/c-common.c 2009-03-12 16:20:37.000000000 +0100 +@@ -51,6 +51,7 @@ along with GCC; see the file COPYING3. + #include "target-def.h" + #include "gimple.h" + #include "fixed-value.h" ++#include "libfuncs.h" + + cpp_reader *parse_in; /* Declared in c-pragma.h. */ + +@@ -4401,10 +4402,28 @@ set_builtin_user_assembler_name (tree de + + builtin = built_in_decls [DECL_FUNCTION_CODE (decl)]; + set_user_assembler_name (builtin, asmspec); +- if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY) +- init_block_move_fn (asmspec); +- else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET) +- init_block_clear_fn (asmspec); ++ switch (DECL_FUNCTION_CODE (decl)) ++ { ++ case BUILT_IN_MEMCPY: ++ init_block_move_fn (asmspec); ++ memcpy_libfunc = set_user_assembler_libfunc ("memcpy", asmspec); ++ break; ++ case BUILT_IN_MEMSET: ++ init_block_clear_fn (asmspec); ++ memset_libfunc = set_user_assembler_libfunc ("memset", asmspec); ++ break; ++ case BUILT_IN_MEMMOVE: ++ memmove_libfunc = set_user_assembler_libfunc ("memmove", asmspec); ++ break; ++ case BUILT_IN_MEMCMP: ++ memcmp_libfunc = set_user_assembler_libfunc ("memcmp", asmspec); ++ break; ++ case BUILT_IN_ABORT: ++ abort_libfunc = set_user_assembler_libfunc ("abort", asmspec); ++ break; ++ default: ++ break; ++ } + } + + /* The number of named compound-literals generated thus far. */ +--- gcc/Makefile.in.jj 2009-02-20 15:49:01.000000000 +0100 ++++ gcc/Makefile.in 2009-03-12 16:42:47.000000000 +0100 +@@ -1890,7 +1890,7 @@ c-common.o : c-common.c $(CONFIG_H) $(SY + $(TARGET_H) $(C_TREE_H) tree-iterator.h langhooks.h tree-mudflap.h \ + intl.h opts.h $(REAL_H) $(CPPLIB_H) $(TREE_INLINE_H) $(HASHTAB_H) \ + $(BUILTINS_DEF) $(CGRAPH_H) $(BASIC_BLOCK_H) $(TARGET_DEF_H) \ +- $(GIMPLE_H) ++ $(GIMPLE_H) libfuncs.h + + c-pretty-print.o : c-pretty-print.c $(C_PRETTY_PRINT_H) \ + $(C_TREE_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(REAL_H) \ +--- gcc/testsuite/gcc.dg/pr39443.c.jj 2009-03-12 16:33:41.000000000 +0100 ++++ gcc/testsuite/gcc.dg/pr39443.c 2009-03-12 16:33:22.000000000 +0100 +@@ -0,0 +1,18 @@ ++/* PR middle-end/39443 */ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++/* { dg-final { scan-assembler-not "memcmp" } } */ ++ ++typedef __SIZE_TYPE__ size_t; ++ ++extern int memcmp (const void *s1, const void *s2, size_t n) ++ __attribute__ ((__nothrow__, __pure__)); ++extern __typeof (memcmp) memcmp __asm__ ("memory_compare"); ++ ++int ++test (char *s, char *t, int cnt) ++{ ++ if (__builtin_expect (cnt, 0)) ++ return memcmp (s, t, cnt); ++ return 0; ++} diff --git a/gcc44-pr39454.patch b/gcc44-pr39454.patch new file mode 100644 index 0000000..cb82106 --- /dev/null +++ b/gcc44-pr39454.patch @@ -0,0 +1,74 @@ +2009-03-13 Jakub Jelinek + + PR bootstrap/39454 + * cse.c (fold_rtx): Don't modify original const_arg1 when + canonicalizing SHIFT_COUNT_TRUNCATED shift count, do it on a + separate variable instead. + * rtlanal.c (nonzero_bits1) : Don't assume anything + from out of range shift counts. + (num_sign_bit_copies1) : Similarly. + +--- gcc/cse.c.jj 2009-03-06 20:29:07.000000000 +0100 ++++ gcc/cse.c 2009-03-13 11:44:11.000000000 +0100 +@@ -3464,6 +3464,7 @@ fold_rtx (rtx x, rtx insn) + int is_shift + = (code == ASHIFT || code == ASHIFTRT || code == LSHIFTRT); + rtx y, inner_const, new_const; ++ rtx canon_const_arg1 = const_arg1; + enum rtx_code associate_code; + + if (is_shift +@@ -3471,8 +3472,9 @@ fold_rtx (rtx x, rtx insn) + || INTVAL (const_arg1) < 0)) + { + if (SHIFT_COUNT_TRUNCATED) +- const_arg1 = GEN_INT (INTVAL (const_arg1) +- & (GET_MODE_BITSIZE (mode) - 1)); ++ canon_const_arg1 = GEN_INT (INTVAL (const_arg1) ++ & (GET_MODE_BITSIZE (mode) ++ - 1)); + else + break; + } +@@ -3531,7 +3533,8 @@ fold_rtx (rtx x, rtx insn) + associate_code = (is_shift || code == MINUS ? PLUS : code); + + new_const = simplify_binary_operation (associate_code, mode, +- const_arg1, inner_const); ++ canon_const_arg1, ++ inner_const); + + if (new_const == 0) + break; +--- gcc/rtlanal.c.jj 2009-02-20 15:55:28.000000000 +0100 ++++ gcc/rtlanal.c 2009-03-13 13:30:55.000000000 +0100 +@@ -4061,7 +4061,8 @@ nonzero_bits1 (const_rtx x, enum machine + low-order bits by left shifts. */ + if (GET_CODE (XEXP (x, 1)) == CONST_INT + && INTVAL (XEXP (x, 1)) >= 0 +- && INTVAL (XEXP (x, 1)) < HOST_BITS_PER_WIDE_INT) ++ && INTVAL (XEXP (x, 1)) < HOST_BITS_PER_WIDE_INT ++ && INTVAL (XEXP (x, 1)) < GET_MODE_BITSIZE (GET_MODE (x))) + { + enum machine_mode inner_mode = GET_MODE (x); + unsigned int width = GET_MODE_BITSIZE (inner_mode); +@@ -4542,7 +4543,8 @@ num_sign_bit_copies1 (const_rtx x, enum + num0 = cached_num_sign_bit_copies (XEXP (x, 0), mode, + known_x, known_mode, known_ret); + if (GET_CODE (XEXP (x, 1)) == CONST_INT +- && INTVAL (XEXP (x, 1)) > 0) ++ && INTVAL (XEXP (x, 1)) > 0 ++ && INTVAL (XEXP (x, 1)) < GET_MODE_BITSIZE (GET_MODE (x))) + num0 = MIN ((int) bitwidth, num0 + INTVAL (XEXP (x, 1))); + + return num0; +@@ -4551,7 +4553,8 @@ num_sign_bit_copies1 (const_rtx x, enum + /* Left shifts destroy copies. */ + if (GET_CODE (XEXP (x, 1)) != CONST_INT + || INTVAL (XEXP (x, 1)) < 0 +- || INTVAL (XEXP (x, 1)) >= (int) bitwidth) ++ || INTVAL (XEXP (x, 1)) >= (int) bitwidth ++ || INTVAL (XEXP (x, 1)) >= GET_MODE_BITSIZE (GET_MODE (x))) + return 1; + + num0 = cached_num_sign_bit_copies (XEXP (x, 0), mode, diff --git a/sources b/sources index 56fca36..c6d98e6 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ 2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz -f6c306d03c8512974488b21eee60a438 gcc-4.4.0-20090310.tar.bz2 +6dca5ece6628cb31123bf1fba7b1cd1e gcc-4.4.0-20090313.tar.bz2