Christian Wiese
12 years ago
1 changed files with 121 additions and 0 deletions
@ -0,0 +1,121 @@
|
||||
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
||||
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
||||
#
|
||||
# Filename: package/.../gcc/gcc47-pr38757.patch
|
||||
# Copyright (C) 2012 The OpenSDE Project
|
||||
#
|
||||
# More information can be found in the files COPYING and README.
|
||||
#
|
||||
# This patch file is dual-licensed. It is available under the license the
|
||||
# patched project is licensed under, as long as it is an OpenSource license
|
||||
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
||||
# of the GNU General Public License as published by the Free Software
|
||||
# Foundation; either version 2 of the License, or (at your option) any later
|
||||
# version.
|
||||
# --- SDE-COPYRIGHT-NOTE-END ---
|
||||
|
||||
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.
|
||||
|
||||
--- a/gcc/langhooks.h 2011-01-03 12:53:05.125745450 +0100
|
||||
+++ b/gcc/langhooks.h 2011-01-04 17:59:43.166744926 +0100
|
||||
@@ -467,6 +467,10 @@ struct lang_hooks
|
||||
gimplification. */
|
||||
bool deep_unsharing;
|
||||
|
||||
+ /* 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. */
|
||||
};
|
||||
--- a/gcc/langhooks-def.h 2011-01-03 12:53:05.000000000 +0100
|
||||
+++ b/gcc/langhooks-def.h 2011-01-04 18:00:44.858851030 +0100
|
||||
@@ -118,6 +118,7 @@ extern void lhd_omp_firstprivatize_type_
|
||||
#define LANG_HOOKS_EH_PROTECT_CLEANUP_ACTIONS NULL
|
||||
#define LANG_HOOKS_EH_USE_CXA_END_CLEANUP false
|
||||
#define LANG_HOOKS_DEEP_UNSHARING false
|
||||
+#define LANG_HOOKS_SOURCE_LANGUAGE NULL
|
||||
|
||||
/* Attribute hooks. */
|
||||
#define LANG_HOOKS_ATTRIBUTE_TABLE NULL
|
||||
@@ -307,7 +308,8 @@ extern void lhd_end_section (void);
|
||||
LANG_HOOKS_EH_RUNTIME_TYPE, \
|
||||
LANG_HOOKS_EH_PROTECT_CLEANUP_ACTIONS, \
|
||||
LANG_HOOKS_EH_USE_CXA_END_CLEANUP, \
|
||||
- LANG_HOOKS_DEEP_UNSHARING \
|
||||
+ LANG_HOOKS_DEEP_UNSHARING, \
|
||||
+ LANG_HOOKS_SOURCE_LANGUAGE \
|
||||
}
|
||||
|
||||
#endif /* GCC_LANG_HOOKS_DEF_H */
|
||||
--- a/gcc/c-lang.c 2011-01-03 12:53:05.376056936 +0100
|
||||
+++ b/gcc/c-lang.c 2011-01-04 17:59:43.167743798 +0100
|
||||
@@ -36,6 +36,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. */
|
||||
|
||||
@@ -45,6 +51,8 @@ enum c_language_kind c_language = clk_c;
|
||||
#define LANG_HOOKS_INIT c_objc_common_init
|
||||
#undef LANG_HOOKS_INIT_TS
|
||||
#define LANG_HOOKS_INIT_TS c_common_init_ts
|
||||
+#undef LANG_HOOKS_SOURCE_LANGUAGE
|
||||
+#define LANG_HOOKS_SOURCE_LANGUAGE c_source_language
|
||||
|
||||
/* Each front end provides its own lang hook initializer. */
|
||||
struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
|
||||
--- a/gcc/dwarf2out.c 2011-01-03 12:53:05.102056475 +0100
|
||||
+++ b/gcc/dwarf2out.c 2011-01-04 18:03:14.534151763 +0100
|
||||
@@ -15793,9 +15793,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
|
||||
- && prototype_p (func_type))
|
||||
- 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 (prototype_p (func_type))
|
||||
+ add_AT_flag (die, DW_AT_prototyped, 1);
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
|
||||
@@ -18438,6 +18447,10 @@ gen_compile_unit_die (const char *filena
|
||||
if (strcmp (language_string, "GNU Go") == 0)
|
||||
language = DW_LANG_Go;
|
||||
}
|
||||
+ else if (strcmp (language_string, "GNU C") == 0
|
||||
+ && lang_hooks.source_language
|
||||
+ && lang_hooks.source_language () >= 1999)
|
||||
+ language = DW_LANG_C99;
|
||||
}
|
||||
|
||||
add_AT_unsigned (die, DW_AT_language, language);
|
Loading…
Reference in new issue