(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
20121108-1.c
       1  char temp[] = "192.168.190.160";
       2  unsigned result = (((((192u<<8)|168u)<<8)|190u)<<8)|160u;
       3  
       4  int strtoul1(const char *a, char **b, int c) __attribute__((noinline, noclone));
       5  int strtoul1(const char *a, char **b, int c)
       6  {
       7    *b = a+3;
       8    if (a == temp)
       9      return 192;
      10    else if (a == temp+4)
      11      return 168;
      12    else if (a == temp+8)
      13      return 190;
      14    else if (a == temp+12)
      15      return 160;
      16    __builtin_abort();
      17  }
      18  
      19  int string_to_ip(const char *s) __attribute__((noinline,noclone));
      20  int string_to_ip(const char *s)
      21  {
      22          int addr;
      23          char *e;
      24          int i;
      25  
      26          if (s == 0)
      27                  return(0);
      28  
      29          for (addr=0, i=0; i<4; ++i) {
      30                  int val = s ? strtoul1(s, &e, 10) : 0;
      31                  addr <<= 8;
      32                  addr |= (val & 0xFF);
      33                  if (s) {
      34                          s = (*e) ? e+1 : e;
      35                  }
      36          }
      37  
      38          return addr;
      39  }
      40  
      41  int main(void)
      42  {
      43    int t = string_to_ip (temp);
      44    printf ("%x\n", t);
      45    printf ("%x\n", result);
      46    if (t != result)
      47      __builtin_abort ();
      48    printf ("WORKS.\n");
      49    return 0;
      50  }
      51