Re: [PATCH 6/13] D: Add D language support to GCC proper.

2017-09-11 Thread Jeff Law
On 09/11/2017 11:27 AM, Mike Stump wrote:
> On Sep 11, 2017, at 9:34 AM, Jeff Law  wrote:
>>
>> On 05/28/2017 03:15 PM, Iain Buclaw wrote:
>>> This patch adds D language support to GCC itself.
>>>
>>> ---
>>>
>>>
>>> 06-d-gcc-proper.patch
>>>
>>>
>>> gcc/ChangeLog
>>>
>>> * config/rs6000/rs6000.c (rs6000_output_function_epilogue):
>>> Support GNU D by using 0 as the language type.
>>> * dwarf2out.c (is_dlang): New function.
>>> (gen_compile_unit_die): Use DW_LANG_D for D.
>>> (declare_in_namespace): Return module die for D, instead of adding
>>> extra declarations into the namespace.
>>> (gen_namespace_die): Generate DW_TAG_module for D.
>>> (gen_decl_die, dwarf2out_decl): Handle CONST_DECLSs for D.
>>> * gcc.c (default_compilers): Add entries for ".d", ".dd" and ".di".This 
>>> is fine when prereqs are approved.
>>
>> jeff
> 
> ENOCOMMENT
Arggh.  It somehow got run onto the end of the ChangeLog.

"This is fine when the prereqs are approved." :-)

jeff



Re: [PATCH 6/13] D: Add D language support to GCC proper.

2017-09-11 Thread Mike Stump
On Sep 11, 2017, at 9:34 AM, Jeff Law  wrote:
> 
> On 05/28/2017 03:15 PM, Iain Buclaw wrote:
>> This patch adds D language support to GCC itself.
>> 
>> ---
>> 
>> 
>> 06-d-gcc-proper.patch
>> 
>> 
>> gcc/ChangeLog
>> 
>>  * config/rs6000/rs6000.c (rs6000_output_function_epilogue):
>>  Support GNU D by using 0 as the language type.
>>  * dwarf2out.c (is_dlang): New function.
>>  (gen_compile_unit_die): Use DW_LANG_D for D.
>>  (declare_in_namespace): Return module die for D, instead of adding
>>  extra declarations into the namespace.
>>  (gen_namespace_die): Generate DW_TAG_module for D.
>>  (gen_decl_die, dwarf2out_decl): Handle CONST_DECLSs for D.
>>  * gcc.c (default_compilers): Add entries for ".d", ".dd" and ".di".This 
>> is fine when prereqs are approved.
> 
> jeff

ENOCOMMENT

Re: [PATCH 6/13] D: Add D language support to GCC proper.

2017-09-11 Thread Jeff Law
On 05/28/2017 03:15 PM, Iain Buclaw wrote:
> This patch adds D language support to GCC itself.
> 
> ---
> 
> 
> 06-d-gcc-proper.patch
> 
> 
> gcc/ChangeLog
> 
>   * config/rs6000/rs6000.c (rs6000_output_function_epilogue):
>   Support GNU D by using 0 as the language type.
>   * dwarf2out.c (is_dlang): New function.
>   (gen_compile_unit_die): Use DW_LANG_D for D.
>   (declare_in_namespace): Return module die for D, instead of adding
>   extra declarations into the namespace.
>   (gen_namespace_die): Generate DW_TAG_module for D.
>   (gen_decl_die, dwarf2out_decl): Handle CONST_DECLSs for D.
>   * gcc.c (default_compilers): Add entries for ".d", ".dd" and ".di".This 
> is fine when prereqs are approved.

jeff


[PATCH 6/13] D: Add D language support to GCC proper.

2017-05-28 Thread Iain Buclaw
This patch adds D language support to GCC itself.

---
gcc/ChangeLog

	* config/rs6000/rs6000.c (rs6000_output_function_epilogue):
	Support GNU D by using 0 as the language type.
	* dwarf2out.c (is_dlang): New function.
	(gen_compile_unit_die): Use DW_LANG_D for D.
	(declare_in_namespace): Return module die for D, instead of adding
	extra declarations into the namespace.
	(gen_namespace_die): Generate DW_TAG_module for D.
	(gen_decl_die, dwarf2out_decl): Handle CONST_DECLSs for D.
	* gcc.c (default_compilers): Add entries for ".d", ".dd" and ".di".

diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index b0d1dd95e5d..32f8527d940 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -31921,11 +31921,12 @@ rs6000_output_function_epilogue (FILE *file,
 	 use language_string.
 	 C is 0.  Fortran is 1.  Pascal is 2.  Ada is 3.  C++ is 9.
 	 Java is 13.  Objective-C is 14.  Objective-C++ isn't assigned
-	 a number, so for now use 9.  LTO, Go and JIT aren't assigned numbers
-	 either, so for now use 0.  */
+	 a number, so for now use 9.  LTO, Go, D, and JIT aren't assigned
+	 numbers either, so for now use 0.  */
   if (lang_GNU_C ()
 	  || ! strcmp (language_string, "GNU GIMPLE")
 	  || ! strcmp (language_string, "GNU Go")
+	  || ! strcmp (language_string, "GNU D")
 	  || ! strcmp (language_string, "libgccjit"))
 	i = 0;
   else if (! strcmp (language_string, "GNU F77")
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 5ff45eb4efd..f4f32440695 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -5079,6 +5079,16 @@ is_ada (void)
   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
 }
 
+/* Return TRUE if the language is D.  */
+
+static inline bool
+is_dlang (void)
+{
+  unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
+
+  return lang == DW_LANG_D;
+}
+
 /* Remove the specified attribute if present.  Return TRUE if removal
was successful.  */
 
@@ -23595,6 +23605,8 @@ gen_compile_unit_die (const char *filename)
 	language = DW_LANG_ObjC;
   else if (strcmp (language_string, "GNU Objective-C++") == 0)
 	language = DW_LANG_ObjC_plus_plus;
+  else if (strcmp (language_string, "GNU D") == 0)
+	language = DW_LANG_D;
   else if (dwarf_version >= 5 || !dwarf_strict)
 	{
 	  if (strcmp (language_string, "GNU Go") == 0)
@@ -25159,7 +25171,7 @@ declare_in_namespace (tree thing, dw_die_ref context_die)
 
   if (ns_context != context_die)
 {
-  if (is_fortran ())
+  if (is_fortran () || is_dlang ())
 	return ns_context;
   if (DECL_P (thing))
 	gen_decl_die (thing, NULL, NULL, ns_context);
@@ -25182,7 +25194,7 @@ gen_namespace_die (tree decl, dw_die_ref context_die)
 {
   /* Output a real namespace or module.  */
   context_die = setup_namespace_context (decl, comp_unit_die ());
-  namespace_die = new_die (is_fortran ()
+  namespace_die = new_die (is_fortran () || is_dlang ()
 			   ? DW_TAG_module : DW_TAG_namespace,
 			   context_die, decl);
   /* For Fortran modules defined in different CU don't add src coords.  */
@@ -25249,7 +25261,7 @@ gen_decl_die (tree decl, tree origin, struct vlr_context *ctx,
   break;
 
 case CONST_DECL:
-  if (!is_fortran () && !is_ada ())
+  if (!is_fortran () && !is_ada () && !is_dlang ())
 	{
 	  /* The individual enumerators of an enum type get output when we output
 	 the Dwarf representation of the relevant enum type itself.  */
@@ -25796,7 +25808,7 @@ dwarf2out_decl (tree decl)
 case CONST_DECL:
   if (debug_info_level <= DINFO_LEVEL_TERSE)
 	return;
-  if (!is_fortran () && !is_ada ())
+  if (!is_fortran () && !is_ada () && !is_dlang ())
 	return;
   if (TREE_STATIC (decl) && decl_function_context (decl))
 	context_die = lookup_decl_die (DECL_CONTEXT (decl));
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 4724276a318..6c3dd23a840 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -1309,6 +1309,7 @@ static const struct compiler default_compilers[] =
   {".java", "#Java", 0, 0, 0}, {".class", "#Java", 0, 0, 0},
   {".zip", "#Java", 0, 0, 0}, {".jar", "#Java", 0, 0, 0},
   {".go", "#Go", 0, 1, 0},
+  {".d", "#D", 0, 1, 0}, {".dd", "#D", 0, 1, 0}, {".di", "#D", 0, 1, 0},
   /* Next come the entries for C.  */
   {".c", "@c", 0, 0, 1},
   {"@c",