This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, Ada] RISC-V: Initial riscv linux Ada port.
- From: Eric Botcazou <ebotcazou at adacore dot com>
- To: Jim Wilson <jimw at sifive dot com>
- Cc: gcc-patches at gcc dot gnu dot org, Pierre-Marie de Rodat <derodat at adacore dot com>
- Date: Fri, 13 Jul 2018 12:16:14 +0200
- Subject: Re: [PATCH, Ada] RISC-V: Initial riscv linux Ada port.
- References: <20180705234444.5935-1-jimw@sifive.com> <b7f5e7e0-7d04-a3b9-7767-bdbf64425e59@adacore.com> <CAFyWVaa3DPbYiTkkq3x9Kjz-Aq_-qsda4EW1b149=uEf_CLYWg@mail.gmail.com>
> I poked at this a little and noticed a difference between the x86_64
> support and the RISC-V support. The RISC-V C language port has char
> as unsigned by default. The x86_64 port has char signed by default.
> If I add a -fsigned-char option, then the testcase works as expected
> for RISC-V. Curiously, the Ada compiler accepts -fsigned-char but not
> -funsigned-char.
But it accepts -fno-signed-char, which is equivalent. :-) In any case, I
agree that it should also accept -funsigned-char, now done.
> I tried hacking in a -funsigned-char flag, but when
> I use it with the x86_64 port the result is still correct. Maybe my
> quick hack wasn't quite right. Anyways, the default signedness of
> char has something to do with the problem.
I don't seem to be able to reproduce the failure with a cross-compiler though
so that's really weird.
* gcc-interface/lang.opt (funsigned-char): New option.
* gcc-interface/misc.c (gnat_handle_option): Accept it.
* gcc-interface/utils.c (finish_character_type): Tweak comment.
--
Eric Botcazou
Index: gcc-interface/lang.opt
===================================================================
--- gcc-interface/lang.opt (revision 262551)
+++ gcc-interface/lang.opt (working copy)
@@ -80,6 +80,10 @@ fsigned-char
Ada AdaWhy AdaSCIL
Make \"char\" signed by default.
+funsigned-char
+Ada AdaWhy AdaSCIL
+Make \"char\" unsigned by default.
+
gant
Ada AdaWhy AdaSCIL Driver Joined Undocumented RejectNegative
Catch typos.
Index: gcc-interface/misc.c
===================================================================
--- gcc-interface/misc.c (revision 262551)
+++ gcc-interface/misc.c (working copy)
@@ -170,6 +170,7 @@ gnat_handle_option (size_t scode, const
case OPT_fshort_enums:
case OPT_fsigned_char:
+ case OPT_funsigned_char:
/* These are handled by the middle-end. */
break;
Index: gcc-interface/utils.c
===================================================================
--- gcc-interface/utils.c (revision 262551)
+++ gcc-interface/utils.c (working copy)
@@ -1684,7 +1684,7 @@ record_builtin_type (const char *name, t
integral types are unsigned.
Unfortunately the signedness of 'char' in C is implementation-defined
- and GCC even has the option -fsigned-char to toggle it at run time.
+ and GCC even has the option -f{un}signed-char to toggle it at run time.
Since GNAT's philosophy is to be compatible with C by default, to wit
Interfaces.C.char is defined as a mere copy of Character, we may need
to declare character types as signed types in GENERIC and generate the