180709Sjake/* Copyright (C) 2002  Free Software Foundation.
280709Sjake
380709Sjake   Test that optimizing ((c>=1) && (c<=127)) into (signed char)c < 0
480709Sjake   doesn't cause any problems for the compiler and behaves correctly.
580709Sjake
680709Sjake   Written by Roger Sayle, 8th May 2002.  */
780709Sjake
880709Sjake#include <limits.h>
980709Sjake
1080709Sjakeextern void abort (void);
1180709Sjake
1280709Sjakevoid
1380709Sjaketestc (unsigned char c, int ok)
1481334Sobrien{
1580709Sjake  if ((c>=1) && (c<=SCHAR_MAX))
1680709Sjake    {
1781334Sobrien      if (!ok) abort ();
1880709Sjake    }
1980709Sjake  else
2080709Sjake    if (ok) abort ();
2180709Sjake}
2280709Sjake
2380709Sjakevoid
2480709Sjaketests (unsigned short s, int ok)
2580709Sjake{
2680709Sjake  if ((s>=1) && (s<=SHRT_MAX))
2780709Sjake    {
2880709Sjake      if (!ok) abort ();
2980709Sjake    }
3080709Sjake  else
3180709Sjake    if (ok) abort ();
3280709Sjake}
3380709Sjake
3480709Sjakevoid
3591224Sjaketesti (unsigned int i, int ok)
3691224Sjake{
3780709Sjake  if ((i>=1) && (i<=INT_MAX))
3891224Sjake    {
3991224Sjake      if (!ok) abort ();
4091224Sjake    }
4180709Sjake  else
4280709Sjake    if (ok) abort ();
4380709Sjake}
4480709Sjake
4580709Sjakevoid
4680709Sjaketestl (unsigned long l, int ok)
4780709Sjake{
4880709Sjake  if ((l>=1) && (l<=LONG_MAX))
4980709Sjake    {
5080709Sjake      if (!ok) abort ();
5180709Sjake    }
5280709Sjake  else
5380709Sjake    if (ok) abort ();
5480709Sjake}
5580709Sjake
5680709Sjakeint
5780709Sjakemain ()
5880709Sjake{
5980709Sjake  testc (0, 0);
6080709Sjake  testc (1, 1);
6180709Sjake  testc (SCHAR_MAX, 1);
6291613Sjake  testc (SCHAR_MAX+1, 0);
6391613Sjake  testc (UCHAR_MAX, 0);
6480709Sjake
6580709Sjake  tests (0, 0);
6680709Sjake  tests (1, 1);
6780709Sjake  tests (SHRT_MAX, 1);
6881176Sjake  tests (SHRT_MAX+1, 0);
6981176Sjake  tests (USHRT_MAX, 0);
7081176Sjake
7181176Sjake  testi (0, 0);
7281176Sjake  testi (1, 1);
7381176Sjake  testi (INT_MAX, 1);
7481176Sjake  testi (INT_MAX+1U, 0);
7581176Sjake  testi (UINT_MAX, 0);
7681176Sjake
7781176Sjake  testl (0, 0);
7881176Sjake  testl (1, 1);
7981176Sjake  testl (LONG_MAX, 1);
8081176Sjake  testl (LONG_MAX+1UL, 0);
8181176Sjake  testl (ULONG_MAX, 0);
8281176Sjake
8391616Sjake  return 0;
8491616Sjake}
8591616Sjake
8696998Sjake