// P1774R8 - Portable assumptions // { dg-do compile { target c++11 } } // { dg-options "-O2" } int foo (int x) { [[assume (x == 42)]]; return x; } int bar (int x) { [[assume (++x == 43)]]; return x; } int baz (int x) { [[assume (({ int z = ++x; static int w; ++w; if (z == 51) return -1; if (z == 53) goto lab1; if (z == 64) throw 1; z == 43; }))]]; lab1: return x; } struct S { S (); S (const S &); ~S (); int a, b; int foo (); }; int qux () { S s; [[assume (s.a == 42 && s.b == 43)]]; return s.a + s.b; } int S::foo () { [[assume (a == 42 && b == 43)]]; return a + b; } int corge (int x) { [[assume (({ [[assume (x < 42)]]; x > -42; }))]]; return x < 42; } int garply (int x) { [[assume (({ [[assume (++x < 43)]]; x > -42; }))]]; return x < 42; }