// Test for std::byte aliasing properties. // { dg-do compile { target c++17 } } // { dg-options "-O3" } #include using byte = std::byte; enum class notbyte: unsigned char {} *np; int main() { int x; /* Stores through byte* can alias int, so the compiler can't optimize "x != 0". */ byte *p = (byte*)&x; x = 42; for (int i = 0; i < 4; ++i) p[i] = byte(0); if (x != 0) __builtin_abort(); /* Stores through notbyte* mustn't alias int, so at -O3 the compiler should optimize "x != 42" to false. */ notbyte *np = (notbyte*)&x; x = 42; for (int i = 0; i < 4; ++i) np[i] = notbyte(0); if (x != 42) __builtin_abort(); }