]>
Commit | Line | Data |
---|---|---|
1 | 2009-03-18 Jakub Jelinek <jakub@redhat.com> | |
2 | ||
3 | PR debug/38757 | |
4 | * langhooks.h (struct lang_hooks): Add source_language langhook. | |
5 | * langhooks-def.h (LANG_HOOKS_SOURCE_LANGUAGE): Define to NULL. | |
6 | (LANG_HOOKS_INITIALIZER): Add LANG_HOOKS_SOURCE_LANGUAGE. | |
7 | * dwarf2out.c (add_prototyped_attribute): Add DW_AT_prototype | |
8 | also for DW_LANG_{C,C99,ObjC}. | |
9 | (gen_compile_unit_die): Use lang_hooks.source_language () to | |
10 | determine if DW_LANG_C99 or DW_LANG_C89 should be returned. | |
11 | c/ | |
12 | * c-lang.c (c_source_language): New function. | |
13 | (LANG_HOOKS_SOURCE_LANGUAGE): Define. | |
14 | ||
15 | --- gcc/langhooks.h.jj 2011-01-03 12:53:05.125745450 +0100 | |
16 | +++ gcc/langhooks.h 2011-01-04 17:59:43.166744926 +0100 | |
17 | @@ -467,6 +467,10 @@ struct lang_hooks | |
18 | gimplification. */ | |
19 | bool deep_unsharing; | |
20 | ||
21 | + /* Return year of the source language standard version if the FE supports | |
22 | + multiple versions of the standard. */ | |
23 | + int (*source_language) (void); | |
24 | + | |
25 | /* Whenever you add entries here, make sure you adjust langhooks-def.h | |
26 | and langhooks.c accordingly. */ | |
27 | }; | |
28 | --- gcc/langhooks-def.h.jj 2011-01-03 12:53:05.000000000 +0100 | |
29 | +++ gcc/langhooks-def.h 2011-01-04 18:00:44.858851030 +0100 | |
30 | @@ -118,6 +118,7 @@ extern void lhd_omp_firstprivatize_type_ | |
31 | #define LANG_HOOKS_BLOCK_MAY_FALLTHRU hook_bool_const_tree_true | |
32 | #define LANG_HOOKS_EH_USE_CXA_END_CLEANUP false | |
33 | #define LANG_HOOKS_DEEP_UNSHARING false | |
34 | +#define LANG_HOOKS_SOURCE_LANGUAGE NULL | |
35 | ||
36 | /* Attribute hooks. */ | |
37 | #define LANG_HOOKS_ATTRIBUTE_TABLE NULL | |
38 | @@ -303,7 +304,8 @@ extern void lhd_end_section (void); | |
39 | LANG_HOOKS_EH_PROTECT_CLEANUP_ACTIONS, \ | |
40 | LANG_HOOKS_BLOCK_MAY_FALLTHRU, \ | |
41 | LANG_HOOKS_EH_USE_CXA_END_CLEANUP, \ | |
42 | - LANG_HOOKS_DEEP_UNSHARING \ | |
43 | + LANG_HOOKS_DEEP_UNSHARING, \ | |
44 | + LANG_HOOKS_SOURCE_LANGUAGE \ | |
45 | } | |
46 | ||
47 | #endif /* GCC_LANG_HOOKS_DEF_H */ | |
48 | --- gcc/c/c-lang.c.jj 2011-01-03 12:53:05.376056936 +0100 | |
49 | +++ gcc/c/c-lang.c 2011-01-04 17:59:43.167743798 +0100 | |
50 | @@ -36,6 +36,12 @@ along with GCC; see the file COPYING3. | |
51 | ||
52 | enum c_language_kind c_language = clk_c; | |
53 | ||
54 | +static int | |
55 | +c_source_language (void) | |
56 | +{ | |
57 | + return flag_isoc99 ? 1999 : 1989; | |
58 | +} | |
59 | + | |
60 | /* Lang hooks common to C and ObjC are declared in c-objc-common.h; | |
61 | consequently, there should be very few hooks below. */ | |
62 | ||
63 | @@ -45,6 +51,8 @@ enum c_language_kind c_language = clk_c; | |
64 | #define LANG_HOOKS_INIT c_objc_common_init | |
65 | #undef LANG_HOOKS_INIT_TS | |
66 | #define LANG_HOOKS_INIT_TS c_common_init_ts | |
67 | +#undef LANG_HOOKS_SOURCE_LANGUAGE | |
68 | +#define LANG_HOOKS_SOURCE_LANGUAGE c_source_language | |
69 | ||
70 | /* Each front end provides its own lang hook initializer. */ | |
71 | struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; | |
72 | --- gcc/dwarf2out.c.jj 2011-01-03 12:53:05.102056475 +0100 | |
73 | +++ gcc/dwarf2out.c 2011-01-04 18:03:14.534151763 +0100 | |
74 | @@ -16109,9 +16109,18 @@ add_bit_size_attribute (dw_die_ref die, | |
75 | static inline void | |
76 | add_prototyped_attribute (dw_die_ref die, tree func_type) | |
77 | { | |
78 | - if (get_AT_unsigned (comp_unit_die (), DW_AT_language) == DW_LANG_C89 | |
79 | - && prototype_p (func_type)) | |
80 | - add_AT_flag (die, DW_AT_prototyped, 1); | |
81 | + switch (get_AT_unsigned (comp_unit_die (), DW_AT_language)) | |
82 | + { | |
83 | + case DW_LANG_C: | |
84 | + case DW_LANG_C89: | |
85 | + case DW_LANG_C99: | |
86 | + case DW_LANG_ObjC: | |
87 | + if (prototype_p (func_type)) | |
88 | + add_AT_flag (die, DW_AT_prototyped, 1); | |
89 | + break; | |
90 | + default: | |
91 | + break; | |
92 | + } | |
93 | } | |
94 | ||
95 | /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found | |
96 | @@ -18915,6 +18924,10 @@ gen_compile_unit_die (const char *filena | |
97 | if (strcmp (language_string, "GNU Go") == 0) | |
98 | language = DW_LANG_Go; | |
99 | } | |
100 | + else if (strcmp (language_string, "GNU C") == 0 | |
101 | + && lang_hooks.source_language | |
102 | + && lang_hooks.source_language () >= 1999) | |
103 | + language = DW_LANG_C99; | |
104 | } | |
105 | /* Use a degraded Fortran setting in strict DWARF2 so is_fortran works. */ | |
106 | else if (strcmp (language_string, "GNU Fortran") == 0) |