From 9ecc1a3a56d3cfe8691f660e1a3623d6640dd37f Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 19 Mar 2009 16:53:24 +0000 Subject: [PATCH] 4.4.0-0.28 --- .cvsignore | 2 +- gcc.spec | 25 +++++- gcc44-c++-builtin-redecl.patch | 6 +- gcc44-memmove-opt.patch | 128 +++++++++++++++++++++++++++++ gcc44-pr37959.patch | 146 +++++++++++++++++++++++++++++++++ gcc44-pr38757.patch | 129 +++++++++++++++++++++++++++++ sources | 2 +- 7 files changed, 429 insertions(+), 9 deletions(-) create mode 100644 gcc44-memmove-opt.patch create mode 100644 gcc44-pr37959.patch create mode 100644 gcc44-pr38757.patch diff --git a/.cvsignore b/.cvsignore index c4b0c0b..86a08f7 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ fastjar-0.97.tar.gz -gcc-4.4.0-20090317.tar.bz2 +gcc-4.4.0-20090319.tar.bz2 diff --git a/gcc.spec b/gcc.spec index 23512d7..f550a1d 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,9 +1,9 @@ -%define DATE 20090317 -%define SVNREV 144916 +%define DATE 20090319 +%define SVNREV 144967 %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.27 +%define gcc_release 0.28 %define _unpackaged_files_terminate_build 0 %define multilib_64_archs sparc64 ppc64 s390x x86_64 %define include_gappletviewer 1 @@ -47,7 +47,7 @@ License: GPLv3+ and GPLv2+ with exceptions Group: Development/Languages # The source for this package was pulled from upstream's vcs. Use the # following commands to generate the tarball: -# svn export svn://gcc.gnu.org/svn/gcc/branches/redhat/gcc-4_3-branch@%{SVNREV} gcc-%{version}-%{DATE} +# svn export svn://gcc.gnu.org/svn/gcc/branches/redhat/gcc-4_4-branch@%{SVNREV} gcc-%{version}-%{DATE} # tar cf - gcc-%{version}-%{DATE} | bzip2 -9 > gcc-%{version}-%{DATE}.tar.bz2 Source0: gcc-%{version}-%{DATE}.tar.bz2 Source1: libgcc_post_upgrade.c @@ -153,6 +153,9 @@ Patch24: gcc44-atom.patch Patch25: gcc44-pr39226.patch Patch26: gcc44-power7.patch Patch27: gcc44-power7-2.patch +Patch28: gcc44-pr38757.patch +Patch29: gcc44-pr37959.patch +Patch30: gcc44-memmove-opt.patch Patch1000: fastjar-0.97-segfault.patch @@ -443,6 +446,9 @@ which are required to compile with the GNAT. %patch25 -p0 -b .pr39226~ %patch26 -p0 -b .power7~ %patch27 -p0 -b .power7-2~ +%patch28 -p0 -b .pr38757~ +%patch29 -p0 -b .pr37959~ +%patch30 -p0 -b .memmove-opt~ # This testcase doesn't compile. rm libjava/testsuite/libjava.lang/PR35020* @@ -1753,6 +1759,17 @@ fi %doc rpm.doc/changelogs/libmudflap/ChangeLog* %changelog +* Thu Mar 19 2009 Jakub Jelinek 4.4.0-0.28 +- update from trunk + - PRs c++/39425, c++/39475, c/39495, debug/39485, middle-end/37805, + middle-end/38609, middle-end/39378, middle-end/39447, + middle-end/39500, target/35180, target/39063, target/39496 + - fix RA bug with global reg variables (#490509) +- use DW_LANG_C99 for -std=c99 or -std=gnu99 compiled C code (PR debug/38757) +- emit DW_AT_explicit when needed (PR debug/37959) +- optimize memmove into memcpy in more cases when we can prove src and dest + don't overlap + * Tue Mar 17 2009 Jakub Jelinek 4.4.0-0.27 - update from trunk - PRs debug/37890, debug/39471, debug/39474, libstdc++/39405, target/34299, diff --git a/gcc44-c++-builtin-redecl.patch b/gcc44-c++-builtin-redecl.patch index 77655ad..1f36f1f 100644 --- a/gcc44-c++-builtin-redecl.patch +++ b/gcc44-c++-builtin-redecl.patch @@ -9,7 +9,7 @@ --- gcc/cp/decl.c.jj 2007-10-01 22:11:09.000000000 +0200 +++ gcc/cp/decl.c 2007-10-02 11:39:46.000000000 +0200 -@@ -1988,23 +1988,21 @@ duplicate_decls (tree newdecl, tree oldd +@@ -2001,23 +2001,21 @@ duplicate_decls (tree newdecl, tree oldd DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl); DECL_RESULT (olddecl) = DECL_RESULT (newdecl); } @@ -40,8 +40,8 @@ - } - DECL_RESULT (newdecl) = DECL_RESULT (olddecl); - /* Don't clear out the arguments if we're redefining a function. */ - if (DECL_ARGUMENTS (olddecl)) + /* Don't clear out the arguments if we're just redeclaring a + function. */ --- gcc/testsuite/gcc.dg/builtins-65.c.jj 2007-10-02 11:23:51.000000000 +0200 +++ gcc/testsuite/gcc.dg/builtins-65.c 2007-10-02 11:24:12.000000000 +0200 @@ -0,0 +1,25 @@ diff --git a/gcc44-memmove-opt.patch b/gcc44-memmove-opt.patch new file mode 100644 index 0000000..e35ade2 --- /dev/null +++ b/gcc44-memmove-opt.patch @@ -0,0 +1,128 @@ +2009-03-18 Jakub Jelinek + + * builtins.c (fold_builtin_memory_op): Optimize memmove + into memcpy if we can prove source and destination don't overlap. + + * gcc.dg/memmove-2.c: New test. + * gcc.dg/memmove-3.c: New test. + +--- gcc/builtins.c.jj 2009-03-04 20:06:31.000000000 +0100 ++++ gcc/builtins.c 2009-03-18 18:19:28.000000000 +0100 +@@ -8882,17 +8882,74 @@ fold_builtin_memory_op (tree dest, tree + really mandatory? + + If either SRC is readonly or length is 1, we can use memcpy. */ +- if (dest_align && src_align +- && (readonly_data_expr (src) +- || (host_integerp (len, 1) +- && (MIN (src_align, dest_align) / BITS_PER_UNIT >= +- tree_low_cst (len, 1))))) ++ if (!dest_align || !src_align) ++ return NULL_TREE; ++ if (readonly_data_expr (src) ++ || (host_integerp (len, 1) ++ && (MIN (src_align, dest_align) / BITS_PER_UNIT >= ++ tree_low_cst (len, 1)))) + { + tree fn = implicit_built_in_decls[BUILT_IN_MEMCPY]; + if (!fn) + return NULL_TREE; + return build_call_expr (fn, 3, dest, src, len); + } ++ ++ /* If *src and *dest can't overlap, optimize into memcpy as well. */ ++ srcvar = build_fold_indirect_ref (src); ++ destvar = build_fold_indirect_ref (dest); ++ if (srcvar && !TREE_THIS_VOLATILE (srcvar) ++ && destvar && !TREE_THIS_VOLATILE (destvar)) ++ { ++ tree src_base, dest_base, fn; ++ HOST_WIDE_INT src_offset = 0, dest_offset = 0; ++ HOST_WIDE_INT size = -1; ++ HOST_WIDE_INT maxsize = -1; ++ ++ src_base = srcvar; ++ if (handled_component_p (src_base)) ++ src_base = get_ref_base_and_extent (src_base, &src_offset, ++ &size, &maxsize); ++ dest_base = destvar; ++ if (handled_component_p (dest_base)) ++ dest_base = get_ref_base_and_extent (dest_base, &dest_offset, ++ &size, &maxsize); ++ if (host_integerp (len, 1)) ++ { ++ maxsize = tree_low_cst (len, 1); ++ if (maxsize ++ > INTTYPE_MAXIMUM (HOST_WIDE_INT) / BITS_PER_UNIT) ++ maxsize = -1; ++ else ++ maxsize *= BITS_PER_UNIT; ++ } ++ else ++ maxsize = -1; ++ if (SSA_VAR_P (src_base) ++ && SSA_VAR_P (dest_base)) ++ { ++ if (operand_equal_p (src_base, dest_base, 0) ++ && ranges_overlap_p (src_offset, maxsize, ++ dest_offset, maxsize)) ++ return NULL_TREE; ++ } ++ else if (TREE_CODE (src_base) == INDIRECT_REF ++ && TREE_CODE (dest_base) == INDIRECT_REF) ++ { ++ if (! operand_equal_p (TREE_OPERAND (src_base, 0), ++ TREE_OPERAND (dest_base, 0), 0) ++ || ranges_overlap_p (src_offset, maxsize, ++ dest_offset, maxsize)) ++ return NULL_TREE; ++ } ++ else ++ return NULL_TREE; ++ ++ fn = implicit_built_in_decls[BUILT_IN_MEMCPY]; ++ if (!fn) ++ return NULL_TREE; ++ return build_call_expr (fn, 3, dest, src, len); ++ } + return NULL_TREE; + } + +--- gcc/testsuite/gcc.dg/memmove-2.c.jj 2009-03-18 18:30:17.000000000 +0100 ++++ gcc/testsuite/gcc.dg/memmove-2.c 2009-03-18 18:30:49.000000000 +0100 +@@ -0,0 +1,16 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -fdump-tree-optimized" } */ ++/* { dg-final { scan-tree-dump-times "memmove" 0 "optimized" } } */ ++/* { dg-final { cleanup-tree-dump "optimized" } } */ ++ ++char a[40]; ++extern void bar (char *); ++ ++void ++foo (void) ++{ ++ char b[10]; ++ __builtin_memmove (&a[0], &a[20], 20); ++ __builtin_memmove (&b[1], &a[25], 9); ++ bar (b); ++} +--- gcc/testsuite/gcc.dg/memmove-3.c.jj 2009-03-18 18:30:19.000000000 +0100 ++++ gcc/testsuite/gcc.dg/memmove-3.c 2009-03-18 18:31:01.000000000 +0100 +@@ -0,0 +1,16 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -fdump-tree-optimized" } */ ++/* { dg-final { scan-tree-dump-times "memmove" 3 "optimized" } } */ ++/* { dg-final { cleanup-tree-dump "optimized" } } */ ++ ++char a[40]; ++struct A { char a[30]; }; ++ ++void ++foo (struct A *p, char *q, char *r) ++{ ++ char b[10]; ++ __builtin_memmove (&a[1], &a[19], 20); ++ __builtin_memmove (&p->a[1], &p->a[9], 10); ++ __builtin_memmove (q, r, 9); ++} diff --git a/gcc44-pr37959.patch b/gcc44-pr37959.patch new file mode 100644 index 0000000..00363b1 --- /dev/null +++ b/gcc44-pr37959.patch @@ -0,0 +1,146 @@ +2009-03-18 Dodji Seketeli + Jakub Jelinek + + PR debug/37959 + * dwarf2out.c (dwarf_attr_name): Handle DW_AT_explicit attribute. + (gen_subprogram_die): When a function is explicit, generate the DW_AT_explicit + attribute. + * langhooks.h (struct lang_hooks_for_decls): Add function_decl_explicit_p + langhook. + * langhooks-def.h (LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P): Define. + (LANG_HOOKS_DECLS): Add LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P. + + * cp-objcp-common.h (LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P): Define. + (cp_function_decl_explicit_p): New prototype. + * cp-objcp-common.c (cp_function_decl_explicit_p): New function. + + * g++.dg/debug/dwarf2/explicit-constructor.C: New test. + +--- gcc/cp/cp-objcp-common.c.jj 2009-03-05 22:32:17.000000000 +0100 ++++ gcc/cp/cp-objcp-common.c 2009-03-18 14:31:17.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Some code common to C++ and ObjC++ front ends. +- Copyright (C) 2004, 2007, 2008 Free Software Foundation, Inc. ++ Copyright (C) 2004, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Ziemowit Laski + + This file is part of GCC. +@@ -203,6 +203,16 @@ cxx_staticp (tree arg) + return NULL_TREE; + } + ++/* Return true if DECL is explicit member function. */ ++ ++bool ++cp_function_decl_explicit_p (tree decl) ++{ ++ return (decl ++ && FUNCTION_FIRST_USER_PARMTYPE (decl) != void_list_node ++ && DECL_NONCONVERTING_P (decl)); ++} ++ + /* Stubs to keep c-opts.c happy. */ + void + push_file_scope (void) +--- gcc/cp/cp-objcp-common.h.jj 2009-03-02 16:21:33.000000000 +0100 ++++ gcc/cp/cp-objcp-common.h 2009-03-18 14:33:51.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Language hooks common to C++ and ObjC++ front ends. +- Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. ++ Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Ziemowit Laski + + This file is part of GCC. +@@ -26,6 +26,8 @@ along with GCC; see the file COPYING3. + extern tree objcp_tsubst_copy_and_build (tree, tree, tsubst_flags_t, + tree, bool); + ++extern bool cp_function_decl_explicit_p (tree decl); ++ + /* Lang hooks that are shared between C++ and ObjC++ are defined here. Hooks + specific to C++ or ObjC++ go in cp/cp-lang.c and objcp/objcp-lang.c, + respectively. */ +@@ -131,6 +133,8 @@ extern tree objcp_tsubst_copy_and_build + #define LANG_HOOKS_TO_TARGET_CHARSET c_common_to_target_charset + #undef LANG_HOOKS_GIMPLIFY_EXPR + #define LANG_HOOKS_GIMPLIFY_EXPR cp_gimplify_expr ++#undef LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P ++#define LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P cp_function_decl_explicit_p + #undef LANG_HOOKS_OMP_PREDETERMINED_SHARING + #define LANG_HOOKS_OMP_PREDETERMINED_SHARING cxx_omp_predetermined_sharing + #undef LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR +--- gcc/langhooks-def.h.jj 2009-03-18 14:24:43.000000000 +0100 ++++ gcc/langhooks-def.h 2009-03-18 14:32:37.000000000 +0100 +@@ -190,6 +190,7 @@ extern tree lhd_make_node (enum tree_cod + #define LANG_HOOKS_GLOBAL_BINDINGS_P global_bindings_p + #define LANG_HOOKS_PUSHDECL pushdecl + #define LANG_HOOKS_GETDECLS getdecls ++#define LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P hook_bool_tree_false + #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL lhd_warn_unused_global_decl + #define LANG_HOOKS_WRITE_GLOBALS write_global_declarations + #define LANG_HOOKS_DECL_OK_FOR_SIBCALL lhd_decl_ok_for_sibcall +@@ -209,6 +210,7 @@ extern tree lhd_make_node (enum tree_cod + LANG_HOOKS_GLOBAL_BINDINGS_P, \ + LANG_HOOKS_PUSHDECL, \ + LANG_HOOKS_GETDECLS, \ ++ LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P, \ + LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL, \ + LANG_HOOKS_WRITE_GLOBALS, \ + LANG_HOOKS_DECL_OK_FOR_SIBCALL, \ +--- gcc/langhooks.h.jj 2009-03-18 14:24:43.000000000 +0100 ++++ gcc/langhooks.h 2009-03-18 14:32:06.000000000 +0100 +@@ -159,6 +159,9 @@ struct lang_hooks_for_decls + /* Returns the chain of decls so far in the current scope level. */ + tree (*getdecls) (void); + ++ /* Returns true if DECL is explicit member function. */ ++ bool (*function_decl_explicit_p) (tree); ++ + /* Returns true when we should warn for an unused global DECL. + We will already have checked that it has static binding. */ + bool (*warn_unused_global) (const_tree); +--- gcc/dwarf2out.c.jj 2009-03-18 14:24:43.000000000 +0100 ++++ gcc/dwarf2out.c 2009-03-18 14:33:04.000000000 +0100 +@@ -5599,6 +5599,8 @@ dwarf_attr_name (unsigned int attr) + return "DW_AT_encoding"; + case DW_AT_external: + return "DW_AT_external"; ++ case DW_AT_explicit: ++ return "DW_AT_explicit"; + case DW_AT_frame_base: + return "DW_AT_frame_base"; + case DW_AT_friend: +@@ -13620,6 +13622,11 @@ gen_subprogram_die (tree decl, dw_die_re + { + add_AT_flag (subr_die, DW_AT_declaration, 1); + ++ /* If this is an explicit function declaration then generate ++ a DW_AT_explicit attribute. */ ++ if (lang_hooks.decls.function_decl_explicit_p (decl)) ++ add_AT_flag (subr_die, DW_AT_explicit, 1); ++ + /* The first time we see a member function, it is in the context of + the class to which it belongs. We make sure of this by emitting + the class first. The next time is the definition, which is +--- gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C.jj 2009-03-18 14:24:55.000000000 +0100 ++++ gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C 2009-03-18 14:24:55.000000000 +0100 +@@ -0,0 +1,19 @@ ++// Contributed by Dodji Seketeli ++// Origin: PR c++ ++// { dg-do compile } ++// { dg-options "-O -g -dA" } ++// { dg-final { scan-assembler-times "DW_AT_explicit" 2 } } ++ ++struct Foo ++{ ++ Foo () {} ++ explicit Foo (int) {} ++ Foo (char) {} ++ ~Foo () {}; ++}; ++ ++void ++bar () ++{ ++ Foo foo; ++} diff --git a/gcc44-pr38757.patch b/gcc44-pr38757.patch new file mode 100644 index 0000000..c166411 --- /dev/null +++ b/gcc44-pr38757.patch @@ -0,0 +1,129 @@ +2009-03-18 Jakub Jelinek + + PR debug/38757 + * langhooks.h (struct lang_hooks): Add source_language langhook. + * langhooks-def.h (LANG_HOOKS_SOURCE_LANGUAGE): Define to NULL. + (LANG_HOOKS_INITIALIZER): Add LANG_HOOKS_SOURCE_LANGUAGE. + * c-lang.c (c_source_language): New function. + (LANG_HOOKS_SOURCE_LANGUAGE): Define. + * dwarf2out.c (add_prototyped_attribute): Add DW_AT_prototype + also for DW_LANG_{C,C99,ObjC}. + (gen_compile_unit_die): Use lang_hooks.source_language () to + determine if DW_LANG_C99 or DW_LANG_C89 should be returned. + +--- gcc/langhooks.h.jj 2009-03-02 09:45:47.000000000 +0100 ++++ gcc/langhooks.h 2009-03-18 12:53:24.000000000 +0100 +@@ -1,5 +1,5 @@ + /* The lang_hooks data structure. +- Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 ++ Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + + This file is part of GCC. +@@ -414,6 +414,10 @@ struct lang_hooks + if in the process TREE_CONSTANT or TREE_SIDE_EFFECTS need updating. */ + tree (*expr_to_decl) (tree expr, bool *tc, bool *se); + ++ /* Return year of the source language standard version if the FE supports ++ multiple versions of the standard. */ ++ int (*source_language) (void); ++ + /* Whenever you add entries here, make sure you adjust langhooks-def.h + and langhooks.c accordingly. */ + }; +--- gcc/langhooks-def.h.jj 2009-03-02 09:45:47.000000000 +0100 ++++ gcc/langhooks-def.h 2009-03-18 12:53:45.000000000 +0100 +@@ -1,5 +1,5 @@ + /* Default macros to initialize the lang_hooks data structure. +- Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 ++ Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Alexandre Oliva + +@@ -113,6 +113,7 @@ extern void lhd_omp_firstprivatize_type_ + #define LANG_HOOKS_EXPR_TO_DECL lhd_expr_to_decl + #define LANG_HOOKS_TO_TARGET_CHARSET lhd_to_target_charset + #define LANG_HOOKS_INIT_TS lhd_do_nothing ++#define LANG_HOOKS_SOURCE_LANGUAGE NULL + + /* Attribute hooks. */ + #define LANG_HOOKS_ATTRIBUTE_TABLE NULL +@@ -270,6 +271,7 @@ extern tree lhd_make_node (enum tree_cod + LANG_HOOKS_BUILTIN_FUNCTION_EXT_SCOPE, \ + LANG_HOOKS_INIT_TS, \ + LANG_HOOKS_EXPR_TO_DECL, \ ++ LANG_HOOKS_SOURCE_LANGUAGE, \ + } + + #endif /* GCC_LANG_HOOKS_DEF_H */ +--- gcc/c-lang.c.jj 2009-02-20 15:06:14.000000000 +0100 ++++ gcc/c-lang.c 2009-03-18 13:33:41.000000000 +0100 +@@ -1,6 +1,6 @@ + /* Language-specific hook definitions for C front end. + Copyright (C) 1991, 1995, 1997, 1998, +- 1999, 2000, 2001, 2003, 2004, 2005, 2007, 2008 ++ 1999, 2000, 2001, 2003, 2004, 2005, 2007, 2008, 2009 + Free Software Foundation, Inc. + + This file is part of GCC. +@@ -37,6 +37,12 @@ along with GCC; see the file COPYING3. + + enum c_language_kind c_language = clk_c; + ++static int ++c_source_language (void) ++{ ++ return flag_isoc99 ? 1999 : 1989; ++} ++ + /* Lang hooks common to C and ObjC are declared in c-objc-common.h; + consequently, there should be very few hooks below. */ + +@@ -44,6 +50,8 @@ enum c_language_kind c_language = clk_c; + #define LANG_HOOKS_NAME "GNU C" + #undef LANG_HOOKS_INIT + #define LANG_HOOKS_INIT c_objc_common_init ++#undef LANG_HOOKS_SOURCE_LANGUAGE ++#define LANG_HOOKS_SOURCE_LANGUAGE c_source_language + + /* Each front end provides its own lang hook initializer. */ + const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; +--- gcc/dwarf2out.c.jj 2009-03-17 13:06:29.000000000 +0100 ++++ gcc/dwarf2out.c 2009-03-18 12:55:36.000000000 +0100 +@@ -12470,9 +12470,18 @@ add_bit_size_attribute (dw_die_ref die, + static inline void + add_prototyped_attribute (dw_die_ref die, tree func_type) + { +- if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89 +- && TYPE_ARG_TYPES (func_type) != NULL) +- add_AT_flag (die, DW_AT_prototyped, 1); ++ switch (get_AT_unsigned (comp_unit_die, DW_AT_language)) ++ { ++ case DW_LANG_C: ++ case DW_LANG_C89: ++ case DW_LANG_C99: ++ case DW_LANG_ObjC: ++ if (TYPE_ARG_TYPES (func_type) != NULL) ++ add_AT_flag (die, DW_AT_prototyped, 1); ++ break; ++ default: ++ break; ++ } + } + + /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found +@@ -14419,7 +14428,13 @@ gen_compile_unit_die (const char *filena + else if (strcmp (language_string, "GNU Objective-C++") == 0) + language = DW_LANG_ObjC_plus_plus; + else +- language = DW_LANG_C89; ++ { ++ if (lang_hooks.source_language ++ && lang_hooks.source_language () >= 1999) ++ language = DW_LANG_C99; ++ else ++ language = DW_LANG_C89; ++ } + + add_AT_unsigned (die, DW_AT_language, language); + return die; diff --git a/sources b/sources index e936ca6..bf0f36a 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ 2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz -fc00990e92faf4bc5668d2cd6234fa4c gcc-4.4.0-20090317.tar.bz2 +2992035eaf092d72eb98ad16b173f737 gcc-4.4.0-20090319.tar.bz2