summaryrefslogtreecommitdiff
path: root/debian/patches/gdc-5.diff
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/gdc-5.diff')
-rw-r--r--debian/patches/gdc-5.diff94
1 files changed, 94 insertions, 0 deletions
diff --git a/debian/patches/gdc-5.diff b/debian/patches/gdc-5.diff
new file mode 100644
index 0000000..5c5a6f7
--- /dev/null
+++ b/debian/patches/gdc-5.diff
@@ -0,0 +1,94 @@
+# DP: This implements D language support in the GCC back end, and adds
+# DP: relevant documentation about the GDC front end (code part).
+
+Index: b/src/gcc/config/rs6000/rs6000.c
+===================================================================
+--- a/src/gcc/config/rs6000/rs6000.c
++++ b/src/gcc/config/rs6000/rs6000.c
+@@ -24935,7 +24935,8 @@ rs6000_output_function_epilogue (FILE *f
+ either, so for now use 0. */
+ if (! strcmp (language_string, "GNU C")
+ || ! strcmp (language_string, "GNU GIMPLE")
+- || ! strcmp (language_string, "GNU Go"))
++ || ! strcmp (language_string, "GNU Go")
++ || ! strcmp (language_string, "GNU D"))
+ i = 0;
+ else if (! strcmp (language_string, "GNU F77")
+ || ! strcmp (language_string, "GNU Fortran"))
+Index: b/src/gcc/dwarf2out.c
+===================================================================
+--- a/src/gcc/dwarf2out.c
++++ b/src/gcc/dwarf2out.c
+@@ -4613,6 +4613,15 @@ 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. */
+
+ static void
+@@ -19292,6 +19301,8 @@ gen_compile_unit_die (const char *filena
+ language = DW_LANG_C89;
+ if (strcmp (language_string, "GNU C++") == 0)
+ language = DW_LANG_C_plus_plus;
++ else if (strcmp (language_string, "GNU D") == 0)
++ language = DW_LANG_D;
+ else if (strcmp (language_string, "GNU F77") == 0)
+ language = DW_LANG_Fortran77;
+ else if (strcmp (language_string, "GNU Pascal") == 0)
+@@ -20233,7 +20244,7 @@ declare_in_namespace (tree thing, dw_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, ns_context);
+@@ -20256,7 +20267,7 @@ gen_namespace_die (tree decl, dw_die_ref
+ {
+ /* 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. */
+@@ -20313,7 +20324,7 @@ gen_decl_die (tree decl, tree origin, dw
+ 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. */
+@@ -20783,7 +20794,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));
+Index: b/src/gcc/gcc.c
+===================================================================
+--- a/src/gcc/gcc.c
++++ b/src/gcc/gcc.c
+@@ -1028,6 +1028,7 @@ static const struct compiler default_com
+ {".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",