aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/attr-assume-1.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.dg/attr-assume-1.c')
-rw-r--r--gcc/testsuite/gcc.dg/attr-assume-1.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/attr-assume-1.c b/gcc/testsuite/gcc.dg/attr-assume-1.c
new file mode 100644
index 0000000..16e919e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/attr-assume-1.c
@@ -0,0 +1,69 @@
+/* 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 ();
+}