4.4.0-0.28
This commit is contained in:
parent
718ed1464b
commit
9ecc1a3a56
@ -1,2 +1,2 @@
|
||||
fastjar-0.97.tar.gz
|
||||
gcc-4.4.0-20090317.tar.bz2
|
||||
gcc-4.4.0-20090319.tar.bz2
|
||||
|
25
gcc.spec
25
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 <jakub@redhat.com> 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 <jakub@redhat.com> 4.4.0-0.27
|
||||
- update from trunk
|
||||
- PRs debug/37890, debug/39471, debug/39474, libstdc++/39405, target/34299,
|
||||
|
@ -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 @@
|
||||
|
128
gcc44-memmove-opt.patch
Normal file
128
gcc44-memmove-opt.patch
Normal file
@ -0,0 +1,128 @@
|
||||
2009-03-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* 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);
|
||||
+}
|
146
gcc44-pr37959.patch
Normal file
146
gcc44-pr37959.patch
Normal file
@ -0,0 +1,146 @@
|
||||
2009-03-18 Dodji Seketeli <dodji@redhat.com>
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
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 <zlaski@apple.com>
|
||||
|
||||
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 <zlaski@apple.com>
|
||||
|
||||
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 <dodji@redhat.com>
|
||||
+// 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;
|
||||
+}
|
129
gcc44-pr38757.patch
Normal file
129
gcc44-pr38757.patch
Normal file
@ -0,0 +1,129 @@
|
||||
2009-03-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
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 <aoliva@redhat.com>
|
||||
|
||||
@@ -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;
|
Loading…
Reference in New Issue
Block a user