| /* { dg-do run } */ |
| /* { dg-options "-O" } */ |
| |
| /* Test that __builtin_speculation_safe_value returns the correct value. */ |
| /* This test will cause an unfiltered warning to be emitted on targets |
| that have not implemented support for speculative execution |
| barriers. They should fix that rather than disabling this |
| test. */ |
| char a = 1; |
| short b = 2; |
| int c = 3; |
| long d = 4; |
| long long e = 5; |
| int *f = (int*) &c; |
| #ifdef __SIZEOF_INT128__ |
| __int128 g = 9; |
| #endif |
| |
| int main () |
| { |
| if (__builtin_speculation_safe_value (a) != 1) |
| __builtin_abort (); |
| if (__builtin_speculation_safe_value (b) != 2) |
| __builtin_abort (); |
| if (__builtin_speculation_safe_value (c) != 3) |
| __builtin_abort (); |
| if (__builtin_speculation_safe_value (d) != 4) |
| __builtin_abort (); |
| if (__builtin_speculation_safe_value (e) != 5) |
| __builtin_abort (); |
| if (__builtin_speculation_safe_value (f) != &c) |
| __builtin_abort (); |
| #ifdef __SIZEOF_INT128__ |
| if (__builtin_speculation_safe_value (g) != 9) |
| __builtin_abort (); |
| #endif |
| return 0; |
| } |