| 1 | // RUN: %clang_cc1 -triple i386-mingw32 -fms-extensions -fsyntax-only -verify %s |
| 2 | // RUN: %clang_cc1 -triple x86_64-unknown-unknown -fsyntax-only -verify %s |
| 3 | |
| 4 | int nonconst(void); |
| 5 | int isconst(void) __attribute__((const)); |
| 6 | int ispure(int) __attribute__((pure)); |
| 7 | |
| 8 | int foo(int *a, int i) { |
| 9 | #ifdef _MSC_VER |
| 10 | __assume(i != 4); |
| 11 | __assume(++i > 2); //expected-warning {{the argument to '__assume' has side effects that will be discarded}} |
| 12 | __assume(nonconst() > 2); //expected-warning {{the argument to '__assume' has side effects that will be discarded}} |
| 13 | __assume(isconst() > 2); |
| 14 | __assume(ispure(i) > 2); |
| 15 | __assume(ispure(++i) > 2); //expected-warning {{the argument to '__assume' has side effects that will be discarded}} |
| 16 | |
| 17 | int test = sizeof(struct{char qq[(__assume(i != 5), 7)];}); |
| 18 | #else |
| 19 | __builtin_assume(i != 4); |
| 20 | __builtin_assume(++i > 2); //expected-warning {{the argument to '__builtin_assume' has side effects that will be discarded}} |
| 21 | __builtin_assume(nonconst() > 2); //expected-warning {{the argument to '__builtin_assume' has side effects that will be discarded}} |
| 22 | __builtin_assume(isconst() > 2); |
| 23 | __builtin_assume(ispure(i) > 2); |
| 24 | __builtin_assume(ispure(++i) > 2); //expected-warning {{the argument to '__builtin_assume' has side effects that will be discarded}} |
| 25 | |
| 26 | int test = sizeof(struct{char qq[(__builtin_assume(i != 5), 7)];}); |
| 27 | #endif |
| 28 | return a[i]; |
| 29 | } |
| 30 | |
| 31 | |