|  | // RUN: %clang_cc1 -triple i386-mingw32 -fms-extensions -fsyntax-only -verify %s | 
|  | // RUN: %clang_cc1 -triple x86_64-unknown-unknown -fsyntax-only -verify %s | 
|  |  | 
|  | int nonconst(void); | 
|  | int isconst(void) __attribute__((const)); | 
|  | int ispure(int) __attribute__((pure)); | 
|  |  | 
|  | int foo(int *a, int i) { | 
|  | #ifdef _MSC_VER | 
|  | __assume(i != 4); | 
|  | __assume(++i > 2); //expected-warning {{the argument to '__assume' has side effects that will be discarded}} | 
|  | __assume(nonconst() > 2); //expected-warning {{the argument to '__assume' has side effects that will be discarded}} | 
|  | __assume(isconst() > 2); | 
|  | __assume(ispure(i) > 2); | 
|  | __assume(ispure(++i) > 2); //expected-warning {{the argument to '__assume' has side effects that will be discarded}} | 
|  |  | 
|  | int test = sizeof(struct{char qq[(__assume(i != 5), 7)];}); | 
|  | #else | 
|  | __builtin_assume(i != 4); | 
|  | __builtin_assume(++i > 2); //expected-warning {{the argument to '__builtin_assume' has side effects that will be discarded}} | 
|  | __builtin_assume(nonconst() > 2); //expected-warning {{the argument to '__builtin_assume' has side effects that will be discarded}} | 
|  | __builtin_assume(isconst() > 2); | 
|  | __builtin_assume(ispure(i) > 2); | 
|  | __builtin_assume(ispure(++i) > 2); //expected-warning {{the argument to '__builtin_assume' has side effects that will be discarded}} | 
|  |  | 
|  | int test = sizeof(struct{char qq[(__builtin_assume(i != 5), 7)];}); | 
|  | #endif | 
|  | return a[i]; | 
|  | } | 
|  |  |