Hi Philip,

Philip Herron <philip.her...@embecosm.com> writes:

> As some of you might know, I have been working on GCC Rust over on
> GitHub https://github.com/Rust-GCC/gccrs. As the project is moving
> forward and enforcing GCC copyright assignments for contributors, I
> would like to create a branch on the GCC git repo to show the intention
> to be upstream with GCC someday.

I tried building GCC Rust on ppc64le.  With the attached patches,
"make check-rust" succeeds with:

                === rust Summary ===

# of expected passes            2368
# of expected failures          26

Thomas

>From 42099a90a23c31d1af95ceac590938d50a362cf9 Mon Sep 17 00:00:00 2001
From: Thomas Fitzsimmons <fitz...@fitzsim.org>
Date: Thu, 27 May 2021 21:53:29 -0400
Subject: [PATCH 1/2] rs6000: Override TARGET_RUST_OS_INFO in linux64.h

Both config/rs6000/sysv4.h and config/rs6000/linux64.h define
TARGET_RUST_OS_INFO, and both are included in that order in tm.h.  This
change eliminates the error directive, permitting the more specific
definition in linux64.h to override the prior definition in sysv4.h.

gcc/ChangeLog:

2021-05-27  Thomas Fitzsimmons  <fitz...@fitzsim.org>

	* config/rs6000/linux64.h: Undefine TARGET_RUST_OS_INFO before
	defining it.
---
 gcc/config/rs6000/linux64.h | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
index fbd8cf0a693..536007ca685 100644
--- a/gcc/config/rs6000/linux64.h
+++ b/gcc/config/rs6000/linux64.h
@@ -314,9 +314,8 @@ extern int dot_symbols;
     }							\
   while (0)
 
-#ifdef TARGET_RUST_OS_INFO
-# error "TARGET_RUST_OS_INFO already defined in linux64.h (rs6000) - c++ undefines it and redefines it."
-#endif
+/* Override less-specific rs6000/sysv4.h definition. */
+#undef TARGET_RUST_OS_INFO
 #define TARGET_RUST_OS_INFO()          \
   do {                                 \
     GNU_USER_TARGET_RUST_OS_INFO();		\
-- 
2.30.0

>From cd4d663c13d27a53ccabeef3d7d8cffa7a5a5365 Mon Sep 17 00:00:00 2001
From: Thomas Fitzsimmons <fitz...@fitzsim.org>
Date: Thu, 27 May 2021 21:55:46 -0400
Subject: [PATCH 2/2] rs6000: Recognize GNU Rust when producing epilogue

Handling the GNU Rust language when writing a function's epilogue is
necessary to avoid an internal compiler error.

gcc/ChangeLog:

2021-05-27  Thomas Fitzsimmons  <fitz...@fitzsim.org>
            Mark Wielaard  <m...@klomp.org>

	* config/rs6000/rs6000-logue.c (rs6000_output_function_epilogue):
	Set language type field to 0 for GNU Rust.

Co-Authored-By: Mark Wielaard <m...@klomp.org>
---
 gcc/config/rs6000/rs6000-logue.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-logue.c b/gcc/config/rs6000/rs6000-logue.c
index b0ac183ceff..7da8db6d232 100644
--- a/gcc/config/rs6000/rs6000-logue.c
+++ b/gcc/config/rs6000/rs6000-logue.c
@@ -5262,12 +5262,13 @@ rs6000_output_function_epilogue (FILE *file)
 	 use language_string.
 	 C is 0.  Fortran is 1.  Ada is 3.  Modula-2 is 8.  C++ is 9.
 	 Java is 13.  Objective-C is 14.  Objective-C++ isn't assigned
-	 a number, so for now use 9.  LTO, Go, D, and JIT aren't assigned
-	 numbers either, so for now use 0.  */
+	 a number, so for now use 9.  LTO, Go, D, Rust, 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, "GNU Rust")
 	  || ! strcmp (language_string, "libgccjit"))
 	i = 0;
       else if (! strcmp (language_string, "GNU F77")
-- 
2.30.0

Reply via email to