// Test that s.i is not modified by the assume. // { dg-do compile { target c++17 } } struct string { const char *p; int i; constexpr string (const char *p): p(p), i(0) { } constexpr int length () { ++i; return __builtin_strlen (p); } }; constexpr int f() { string s ("foobar"); [[assume (s.length () > 0)]]; if (s.i != 0) __builtin_abort(); int len = s.length (); if (s.i != 1) __builtin_abort(); return len; } static_assert (f());