diff --git a/gcc/ChangeLog b/gcc/ChangeLog index da642a93491..0458f583aec 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-12-03 Zack Weinberg + + * rs6000.h (RETURN_IN_MEMORY): Cast result of + int_size_in_bytes to unsigned HOST_WIDEST_INT so that -1 > 8. + Mon Dec 3 09:18:34 2001 Jeffrey A Law (law@cygnus.com) * mn10200.md (negsf2): Use -0x8000 instead of 0x8000 for diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 59c0455b5f2..3baf6866f60 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -1486,11 +1486,15 @@ typedef struct rs6000_stack { controls this instead of DEFAULT_ABI; V.4 targets needing backward compatibility can change DRAFT_V4_STRUCT_RET to override the default, and -m switches get the final word. See - rs6000_override_options for more details. */ - + rs6000_override_options for more details. + + int_size_in_bytes returns -1 for variable size objects, which go in + memory always. The cast to unsigned makes -1 > 8. */ + #define RETURN_IN_MEMORY(TYPE) \ (AGGREGATE_TYPE_P (TYPE) && \ - (TARGET_AIX_STRUCT_RET || int_size_in_bytes (TYPE) > 8)) + (TARGET_AIX_STRUCT_RET || \ + (unsigned HOST_WIDEST_INT) int_size_in_bytes (TYPE) > 8)) /* DRAFT_V4_STRUCT_RET defaults off. */ #define DRAFT_V4_STRUCT_RET 0