1*2cfa11a5SAlex Lorenz // RUN: %clang_cc1 -fsyntax-only -triple x86_64-apple-darwin-simulator -verify %s 2*2cfa11a5SAlex Lorenz 3*2cfa11a5SAlex Lorenz #if !__is_target_arch(x86_64) || !__is_target_arch(X86_64) 4*2cfa11a5SAlex Lorenz #error "mismatching arch" 5*2cfa11a5SAlex Lorenz #endif 6*2cfa11a5SAlex Lorenz 7*2cfa11a5SAlex Lorenz #if __is_target_arch(arm64) 8*2cfa11a5SAlex Lorenz #error "mismatching arch" 9*2cfa11a5SAlex Lorenz #endif 10*2cfa11a5SAlex Lorenz 11*2cfa11a5SAlex Lorenz // Silently ignore invalid archs. This will ensure that older compilers will 12*2cfa11a5SAlex Lorenz // accept headers that support new arches/vendors/os variants. 13*2cfa11a5SAlex Lorenz #if __is_target_arch(foo) 14*2cfa11a5SAlex Lorenz #error "invalid arch" 15*2cfa11a5SAlex Lorenz #endif 16*2cfa11a5SAlex Lorenz 17*2cfa11a5SAlex Lorenz #if !__is_target_vendor(apple) || !__is_target_vendor(APPLE) 18*2cfa11a5SAlex Lorenz #error "mismatching vendor" 19*2cfa11a5SAlex Lorenz #endif 20*2cfa11a5SAlex Lorenz 21*2cfa11a5SAlex Lorenz #if __is_target_vendor(unknown) 22*2cfa11a5SAlex Lorenz #error "mismatching vendor" 23*2cfa11a5SAlex Lorenz #endif 24*2cfa11a5SAlex Lorenz 25*2cfa11a5SAlex Lorenz #if __is_target_vendor(foo) 26*2cfa11a5SAlex Lorenz #error "invalid vendor" 27*2cfa11a5SAlex Lorenz #endif 28*2cfa11a5SAlex Lorenz 29*2cfa11a5SAlex Lorenz #if !__is_target_os(darwin) || !__is_target_os(DARWIN) 30*2cfa11a5SAlex Lorenz #error "mismatching os" 31*2cfa11a5SAlex Lorenz #endif 32*2cfa11a5SAlex Lorenz 33*2cfa11a5SAlex Lorenz #if __is_target_os(ios) 34*2cfa11a5SAlex Lorenz #error "mismatching os" 35*2cfa11a5SAlex Lorenz #endif 36*2cfa11a5SAlex Lorenz 37*2cfa11a5SAlex Lorenz #if __is_target_os(foo) 38*2cfa11a5SAlex Lorenz #error "invalid os" 39*2cfa11a5SAlex Lorenz #endif 40*2cfa11a5SAlex Lorenz 41*2cfa11a5SAlex Lorenz #if !__is_target_environment(simulator) || !__is_target_environment(SIMULATOR) 42*2cfa11a5SAlex Lorenz #error "mismatching environment" 43*2cfa11a5SAlex Lorenz #endif 44*2cfa11a5SAlex Lorenz 45*2cfa11a5SAlex Lorenz #if __is_target_environment(unknown) 46*2cfa11a5SAlex Lorenz #error "mismatching environment" 47*2cfa11a5SAlex Lorenz #endif 48*2cfa11a5SAlex Lorenz 49*2cfa11a5SAlex Lorenz #if __is_target_environment(foo) 50*2cfa11a5SAlex Lorenz #error "invalid environment" 51*2cfa11a5SAlex Lorenz #endif 52*2cfa11a5SAlex Lorenz 53*2cfa11a5SAlex Lorenz #if !__has_builtin(__is_target_arch) || !__has_builtin(__is_target_os) || !__has_builtin(__is_target_vendor) || !__has_builtin(__is_target_environment) 54*2cfa11a5SAlex Lorenz #error "has builtin doesn't work" 55*2cfa11a5SAlex Lorenz #endif 56*2cfa11a5SAlex Lorenz 57*2cfa11a5SAlex Lorenz #if __is_target_arch(11) // expected-error {{builtin feature check macro requires a parenthesized identifier}} 58*2cfa11a5SAlex Lorenz #error "invalid arch" 59*2cfa11a5SAlex Lorenz #endif 60*2cfa11a5SAlex Lorenz 61*2cfa11a5SAlex Lorenz #if __is_target_arch x86 // expected-error{{missing '(' after '__is_target_arch'}} 62*2cfa11a5SAlex Lorenz #error "invalid arch" 63*2cfa11a5SAlex Lorenz #endif 64*2cfa11a5SAlex Lorenz 65*2cfa11a5SAlex Lorenz #if __is_target_arch ( x86 // expected-error {{unterminated function-like macro invocation}} 66*2cfa11a5SAlex Lorenz #error "invalid arch" 67*2cfa11a5SAlex Lorenz #endif // expected-error@-2 {{expected value in expression}} 68