blob: 16e919ef7bc7de4843cf63709ee6a4dbd64ebe2a [file] [log] [blame]
/* Portable assumptions */
/* { dg-do run } */
/* { dg-options "-std=c2x" } */
int
f1 (int i)
{
[[gnu::assume (i == 42)]];
return i;
}
int
f2 (int i)
{
__attribute__ ((assume (++i == 44)));
return i;
}
int a;
int *volatile c;
int
f3 ()
{
++a;
return 1;
}
int
f4 (double x)
{
[[gnu::assume (__builtin_isfinite (x) && x >= 0.0)]];
return __builtin_isfinite (__builtin_sqrt (x));
}
double
f5 (double x)
{
__attribute__((assume (__builtin_isfinite (__builtin_sqrt (x)))));
return __builtin_sqrt (x);
}
int
f6 (int x)
{
[[gnu::assume (x == 93 ? 1 : 0)]];
return x;
}
int
main ()
{
int b = 42;
double d = 42.0, e = 43.0;
c = &b;
[[__gnu__::__assume__ (f3 ())]];
if (a)
__builtin_abort ();
[[gnu::assume (++b == 43)]];
if (b != 42 || *c != 42)
__builtin_abort ();
__attribute__((assume (d < e)));
int i = 90, j = 91, k = 92;
[[gnu::__assume__ (i == 90), gnu::assume (j <= 91)]] [[gnu::assume (k >= 92)]]
;
__attribute__((__assume__ (i == 90), assume (j <= 91))) __attribute__((assume (k >= 92)));
if (f6 (93) != 93)
__builtin_abort ();
}