Blame SOURCES/gcc48-pr38757.patch

25c7f1
2009-03-18  Jakub Jelinek  <jakub@redhat.com>
25c7f1
25c7f1
	PR debug/38757
25c7f1
	* langhooks.h (struct lang_hooks): Add source_language langhook.
25c7f1
	* langhooks-def.h (LANG_HOOKS_SOURCE_LANGUAGE): Define to NULL.
25c7f1
	(LANG_HOOKS_INITIALIZER): Add LANG_HOOKS_SOURCE_LANGUAGE.
25c7f1
	* dwarf2out.c (add_prototyped_attribute): Add DW_AT_prototype
25c7f1
	also for DW_LANG_{C,C99,ObjC}.
25c7f1
	(gen_compile_unit_die): Use lang_hooks.source_language () to
25c7f1
	determine if DW_LANG_C99 or DW_LANG_C89 should be returned.
25c7f1
c/
25c7f1
	* c-lang.c (c_source_language): New function.
25c7f1
	(LANG_HOOKS_SOURCE_LANGUAGE): Define.
25c7f1
25c7f1
--- gcc/langhooks.h.jj	2011-01-03 12:53:05.125745450 +0100
25c7f1
+++ gcc/langhooks.h	2011-01-04 17:59:43.166744926 +0100
25c7f1
@@ -467,6 +467,10 @@ struct lang_hooks
25c7f1
      gimplification.  */
25c7f1
   bool deep_unsharing;
25c7f1
 
25c7f1
+  /* Return year of the source language standard version if the FE supports
25c7f1
+     multiple versions of the standard.  */
25c7f1
+  int (*source_language) (void);
25c7f1
+
25c7f1
   /* Whenever you add entries here, make sure you adjust langhooks-def.h
25c7f1
      and langhooks.c accordingly.  */
25c7f1
 };
25c7f1
--- gcc/langhooks-def.h.jj	2011-01-03 12:53:05.000000000 +0100
25c7f1
+++ gcc/langhooks-def.h	2011-01-04 18:00:44.858851030 +0100
25c7f1
@@ -118,6 +118,7 @@ extern void lhd_omp_firstprivatize_type_
25c7f1
 #define LANG_HOOKS_BLOCK_MAY_FALLTHRU	hook_bool_const_tree_true
25c7f1
 #define LANG_HOOKS_EH_USE_CXA_END_CLEANUP	false
25c7f1
 #define LANG_HOOKS_DEEP_UNSHARING	false
25c7f1
+#define LANG_HOOKS_SOURCE_LANGUAGE	NULL
25c7f1
 
25c7f1
 /* Attribute hooks.  */
25c7f1
 #define LANG_HOOKS_ATTRIBUTE_TABLE		NULL
25c7f1
@@ -303,7 +304,8 @@ extern void lhd_end_section (void);
25c7f1
   LANG_HOOKS_EH_PROTECT_CLEANUP_ACTIONS, \
25c7f1
   LANG_HOOKS_BLOCK_MAY_FALLTHRU, \
25c7f1
   LANG_HOOKS_EH_USE_CXA_END_CLEANUP, \
25c7f1
-  LANG_HOOKS_DEEP_UNSHARING \
25c7f1
+  LANG_HOOKS_DEEP_UNSHARING, \
25c7f1
+  LANG_HOOKS_SOURCE_LANGUAGE \
25c7f1
 }
25c7f1
 
25c7f1
 #endif /* GCC_LANG_HOOKS_DEF_H */
25c7f1
--- gcc/c/c-lang.c.jj	2011-01-03 12:53:05.376056936 +0100
25c7f1
+++ gcc/c/c-lang.c	2011-01-04 17:59:43.167743798 +0100
25c7f1
@@ -36,6 +36,12 @@ along with GCC; see the file COPYING3.
25c7f1
 
25c7f1
 enum c_language_kind c_language = clk_c;
25c7f1
 
25c7f1
+static int
25c7f1
+c_source_language (void)
25c7f1
+{
25c7f1
+  return flag_isoc99 ? 1999 : 1989;
25c7f1
+}
25c7f1
+
25c7f1
 /* Lang hooks common to C and ObjC are declared in c-objc-common.h;
25c7f1
    consequently, there should be very few hooks below.  */
25c7f1
 
25c7f1
@@ -45,6 +51,8 @@ enum c_language_kind c_language = clk_c;
25c7f1
 #define LANG_HOOKS_INIT c_objc_common_init
25c7f1
 #undef LANG_HOOKS_INIT_TS
25c7f1
 #define LANG_HOOKS_INIT_TS c_common_init_ts
25c7f1
+#undef LANG_HOOKS_SOURCE_LANGUAGE
25c7f1
+#define LANG_HOOKS_SOURCE_LANGUAGE c_source_language
25c7f1
 
25c7f1
 /* Each front end provides its own lang hook initializer.  */
25c7f1
 struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
25c7f1
--- gcc/dwarf2out.c.jj	2011-01-03 12:53:05.102056475 +0100
25c7f1
+++ gcc/dwarf2out.c	2011-01-04 18:03:14.534151763 +0100
25c7f1
@@ -16109,9 +16109,18 @@ add_bit_size_attribute (dw_die_ref die,
25c7f1
 static inline void
25c7f1
 add_prototyped_attribute (dw_die_ref die, tree func_type)
25c7f1
 {
25c7f1
-  if (get_AT_unsigned (comp_unit_die (), DW_AT_language) == DW_LANG_C89
25c7f1
-      && prototype_p (func_type))
25c7f1
-    add_AT_flag (die, DW_AT_prototyped, 1);
25c7f1
+  switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
25c7f1
+    {
25c7f1
+    case DW_LANG_C:
25c7f1
+    case DW_LANG_C89:
25c7f1
+    case DW_LANG_C99:
25c7f1
+    case DW_LANG_ObjC:
25c7f1
+      if (prototype_p (func_type))
25c7f1
+	add_AT_flag (die, DW_AT_prototyped, 1);
25c7f1
+      break;
25c7f1
+    default:
25c7f1
+      break;
25c7f1
+    }
25c7f1
 }
25c7f1
 
25c7f1
 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
25c7f1
@@ -18915,6 +18924,10 @@ gen_compile_unit_die (const char *filena
25c7f1
 	  if (strcmp (language_string, "GNU Go") == 0)
25c7f1
 	    language = DW_LANG_Go;
25c7f1
 	}
25c7f1
+      else if (strcmp (language_string, "GNU C") == 0
25c7f1
+	       && lang_hooks.source_language
25c7f1
+	       && lang_hooks.source_language () >= 1999)
25c7f1
+	language = DW_LANG_C99;
25c7f1
     }
25c7f1
   /* Use a degraded Fortran setting in strict DWARF2 so is_fortran works.  */
25c7f1
   else if (strcmp (language_string, "GNU Fortran") == 0)