(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
ieee/
pr108540-1.c
       1  /* PR tree-optimization/108540 */
       2  
       3  __attribute__((noipa)) void
       4  bar (const char *cp, unsigned long size, char sign, int dsgn)
       5  {
       6    if (__builtin_strcmp (cp, "ZERO") != 0 || size != 4 || sign != '-' || dsgn != 1)
       7      __builtin_abort ();
       8  }
       9  
      10  __attribute__((noipa)) void
      11  foo (int x, int ch, double d)
      12  {
      13    const char *cp = "";
      14    unsigned long size = 0;
      15    char sign = '\0';
      16    switch (x)
      17      {
      18      case 42:
      19        if (__builtin_isinf (d))
      20  	{
      21  	  if (d < 0)
      22  	    sign = '-';
      23  	  cp = "Inf";
      24  	  size = 3;
      25  	  break;
      26  	}
      27        if (__builtin_isnan (d))
      28  	{
      29  	  cp = "NaN";
      30  	  size = 3;
      31  	  break;
      32  	}
      33        if (d < 0)
      34  	{
      35  	  d = -d;
      36  	  sign = '-';
      37  	}
      38        else if (d == 0.0 && __builtin_signbit (d))
      39  	sign = '-';
      40        else
      41  	sign = '\0';
      42        if (ch == 'a' || ch == 'A')
      43  	{
      44  	  union U { long long l; double d; } u;
      45  	  int dsgn;
      46  	  u.d = d;
      47  	  if (u.l < 0)
      48  	    {
      49  	      dsgn = 1;
      50  	      u.l &= 0x7fffffffffffffffLL;
      51  	    }
      52  	  else
      53  	    dsgn = 0;
      54  	  if (__builtin_isinf (d))
      55  	    {
      56  	      cp = "INF";
      57  	      size = 3;
      58  	    }
      59  	  else if (__builtin_isnan (d))
      60  	    {
      61  	      cp = "NAN";
      62  	      size = 3;
      63  	    }
      64  	  else if (d == 0)
      65  	    {
      66  	      cp = "ZERO";
      67  	      size = 4;
      68  	    }
      69  	  else
      70  	    {
      71  	      cp = "WRONG";
      72  	      size = 5;
      73  	    }
      74  	  bar (cp, size, sign, dsgn);
      75  	}
      76      }
      77  }
      78  
      79  int
      80  main ()
      81  {
      82    foo (42, 'a', -0.0);
      83    return 0;
      84  }