diff options
Diffstat (limited to 'gcc48-pr38757.patch')
-rw-r--r-- | gcc48-pr38757.patch | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/gcc48-pr38757.patch b/gcc48-pr38757.patch new file mode 100644 index 0000000..4206584 --- /dev/null +++ b/gcc48-pr38757.patch @@ -0,0 +1,106 @@ +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. + * 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. +c/ + * c-lang.c (c_source_language): New function. + (LANG_HOOKS_SOURCE_LANGUAGE): Define. + +--- gcc/langhooks.h.jj 2011-01-03 12:53:05.125745450 +0100 ++++ 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. */ + }; +--- gcc/langhooks-def.h.jj 2011-01-03 12:53:05.000000000 +0100 ++++ 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_BLOCK_MAY_FALLTHRU hook_bool_const_tree_true + #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 +@@ -303,7 +304,8 @@ extern void lhd_end_section (void); + LANG_HOOKS_EH_PROTECT_CLEANUP_ACTIONS, \ + LANG_HOOKS_BLOCK_MAY_FALLTHRU, \ + 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 */ +--- gcc/c/c-lang.c.jj 2011-01-03 12:53:05.376056936 +0100 ++++ gcc/c/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; +--- gcc/dwarf2out.c.jj 2011-01-03 12:53:05.102056475 +0100 ++++ gcc/dwarf2out.c 2011-01-04 18:03:14.534151763 +0100 +@@ -16109,9 +16109,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 +@@ -18915,6 +18924,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; + } + /* Use a degraded Fortran setting in strict DWARF2 so is_fortran works. */ + else if (strcmp (language_string, "GNU Fortran") == 0) |