avr-elf seems to use HImode for both integer_type_node and
signed_char_type_node, which is causing the check for different sized
VARYING ranges to fail.

I've fixed this by using a char which I think should always be smaller than an
int.  Is there a preferred way of fixing this?  Perhaps 
build_nonstandard_integer
or __attribute__((mode(XX)))?

Tested on an x86-64 x avr-elf.

gcc/ChangeLog:

        * value-range.cc (range_tests_legacy): Use signed char instead
        of signed short.
---
 gcc/value-range.cc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gcc/value-range.cc b/gcc/value-range.cc
index 8d7b46c0239..5eefd5ff174 100644
--- a/gcc/value-range.cc
+++ b/gcc/value-range.cc
@@ -2251,10 +2251,10 @@ range_tests_legacy ()
 
   // VARYING of different sizes should not be equal.
   int_range_max r0 (integer_type_node);
-  int_range_max r1 (short_integer_type_node);
+  int_range_max r1 (signed_char_type_node);
   ASSERT_TRUE (r0 != r1);
   value_range vr0 (integer_type_node);
-  int_range_max vr1 (short_integer_type_node);
+  int_range_max vr1 (signed_char_type_node);
   ASSERT_TRUE (vr0 != vr1);
 }
 
-- 
2.31.1

Reply via email to