diff mbox series

Fix selftest for targets where short and int are the same size.

Message ID 20210525064405.1347426-1-aldyh@redhat.com
State New
Headers show
Series Fix selftest for targets where short and int are the same size. | expand

Commit Message

Aldy Hernandez May 25, 2021, 6:44 a.m. UTC
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(-)

Comments

Jeff Law May 25, 2021, 1:15 p.m. UTC | #1
On 5/25/2021 12:44 AM, Aldy Hernandez wrote:
> 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.
As you note, I wonder if we should just creating our own types for this 
test.  In fact I wonder if that should be considered best practice for 
these tests.  Assumptions about the underlying sizes of the standard 
types has been slightly problematical for the range self-tests.

The alternate approach would be to check the underlying sizes/signedness 
and skip the tests when they don't give us what we need.  But that seems 
inferior to just creating a suitable type.

Jeff

ps.  xstormy16-elf seems to be failing in the same way.  I'll assume 
it's the same problem ;-)
Aldy Hernandez May 25, 2021, 4:36 p.m. UTC | #2
Ok, let's use build_nonstandard_integer_type which works for everyone
and gets you unblocked.

Pushed.

Aldy

On Tue, May 25, 2021 at 3:15 PM Jeff Law <jeffreyalaw@gmail.com> wrote:
>
>
>
> On 5/25/2021 12:44 AM, Aldy Hernandez wrote:
> > 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.
> As you note, I wonder if we should just creating our own types for this
> test.  In fact I wonder if that should be considered best practice for
> these tests.  Assumptions about the underlying sizes of the standard
> types has been slightly problematical for the range self-tests.
>
> The alternate approach would be to check the underlying sizes/signedness
> and skip the tests when they don't give us what we need.  But that seems
> inferior to just creating a suitable type.
>
> Jeff
>
> ps.  xstormy16-elf seems to be failing in the same way.  I'll assume
> it's the same problem ;-)
>
Jeff Law May 25, 2021, 5:10 p.m. UTC | #3
On 5/25/2021 10:36 AM, Aldy Hernandez wrote:
> Ok, let's use build_nonstandard_integer_type which works for everyone
> and gets you unblocked.
Just to be clear, I'm not blocked on xstormy16.   The upstream GCC 
tester flagged the failure and I did enough triage to blame you :-) In 
my day job I'm working in another tree, so you can break the trunk 
willy-nilly and it won't block me.

jeff
diff mbox series

Patch

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);
 }