// P1774R8 - Portable assumptions // { dg-do run { target c++23 } } // { dg-options "-O2 --param=logical-op-non-short-circuit=0" } // Test the we can optimize based on conditions in assume. static inline bool foo (unsigned x) { return x == 4 || x == 5 || x == 9 || x == 10; } int v; [[gnu::noipa]] void bar (const char *p) { if (p[0] != (v ? 'a' : 'b') || p[1]) __builtin_abort (); } [[gnu::noipa]] void baz (unsigned x) { bool a = x == 5; [[assume (foo (x))]]; bar (a ? "a" : "b"); } int main () { baz (4); v = 1; baz (5); v = 0; baz (9); baz (10); }