powerpc-eabi signed char arguments and optimization

Robert Lipe robertl@dgii.com
Sat Oct 24 20:47:00 GMT 1998


I have no particular understanding of this patch, but I do think I
recognize this problem.  I don't know if this patch will apply cleanly
to 1.1, but I suspect it could be stitched in pretty easily.  I've
checked and this work does indeed postdate 1.1.


1998-08-24  Gavin Romig-Koch  <gavin@cygnus.com>

        * typeck.c (c_expand_return): Handle the case that valtype
        is wider than the functions return type.

Index: typeck.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/cp/typeck.c,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -p -r1.99 -r1.100
--- typeck.c    1998/08/24 11:12:27     1.99
+++ typeck.c    1998/08/24 16:31:38     1.100
@@ -7362,9 +7362,17 @@ c_expand_return (retval)
     }
   else
     {
+      tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
+
+      /* First convert the value to the function's return type, then
+        to the type of return value's location to handle the
+         case that functype is thiner than the valtype. */
+
       retval = convert_for_initialization
-       (NULL_TREE, valtype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
+       (NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
         "return", NULL_TREE, 0);
+
+      retval = convert (valtype, retval);

       if (retval == error_mark_node)
        {






Brian Ford wrote:
> I have a sparc-sun-solaris2.6 -> powerpc-unknown-eabi cross compiler from
> egcs1.1b - current CVS sources that gives me this problem.  Note that this
> is a simulation of the actual problem as the embedded system I use cannot
> execute this exact code.
> 
> #include <stdio.h>
> 
> void test(signed char a) {
> 
>    printf("a: %x\n", a);
> 
> }
> 
> int main(void) {
>    signed char a = -60;
> 
>    test(a);
> 
>    return 0;
> }
> 
> Output with -O0:
> a: c4
> 
> Output with -O1+
> a: 107cec4
> 
> Anybody know why this happens?  GCC 2.8.1 does not do this.
> 
> --
> Brian Ford
> Software Engineer
> Vital Visual Simulation Systems
> FlightSafety International
> Phone: 314-551-8460
> Fax:   314-551-8444
> 



More information about the Gcc-bugs mailing list