(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
attr-assume-1.c
       1  /* Portable assumptions */
       2  /* { dg-do run } */
       3  /* { dg-options "-std=c2x" } */
       4  
       5  int
       6  f1 (int i)
       7  {
       8    [[gnu::assume (i == 42)]];
       9    return i;
      10  }
      11  
      12  int
      13  f2 (int i)
      14  {
      15    __attribute__ ((assume (++i == 44)));
      16    return i;
      17  }
      18  
      19  int a;
      20  int *volatile c;
      21  
      22  int
      23  f3 ()
      24  {
      25    ++a;
      26    return 1;
      27  }
      28  
      29  int
      30  f4 (double x)
      31  {
      32    [[gnu::assume (__builtin_isfinite (x) && x >= 0.0)]];
      33    return __builtin_isfinite (__builtin_sqrt (x));
      34  }
      35  
      36  double
      37  f5 (double x)
      38  {
      39    __attribute__((assume (__builtin_isfinite (__builtin_sqrt (x)))));
      40    return __builtin_sqrt (x);
      41  }
      42  
      43  int
      44  f6 (int x)
      45  {
      46    [[gnu::assume (x == 93 ? 1 : 0)]];
      47    return x;
      48  }
      49  
      50  int
      51  main ()
      52  {
      53    int b = 42;
      54    double d = 42.0, e = 43.0;
      55    c = &b;
      56    [[__gnu__::__assume__ (f3 ())]];
      57    if (a)
      58      __builtin_abort ();
      59    [[gnu::assume (++b == 43)]];
      60    if (b != 42 || *c != 42)
      61      __builtin_abort ();
      62    __attribute__((assume (d < e)));
      63    int i = 90, j = 91, k = 92;
      64    [[gnu::__assume__ (i == 90), gnu::assume (j <= 91)]] [[gnu::assume (k >= 92)]]
      65    ;
      66    __attribute__((__assume__ (i == 90), assume (j <= 91))) __attribute__((assume (k >= 92)));
      67    if (f6 (93) != 93)
      68      __builtin_abort ();
      69  }