1// RUN: %clang_cc1 -ffreestanding -Eonly -verify %s 2 3// Try different path permutations of __has_include with existing file. 4#if __has_include("stdint.h") 5#else 6 #error "__has_include failed (1)." 7#endif 8 9#if __has_include(<stdint.h>) 10#else 11 #error "__has_include failed (2)." 12#endif 13 14// Try unary expression. 15#if !__has_include("stdint.h") 16 #error "__has_include failed (5)." 17#endif 18 19// Try binary expression. 20#if __has_include("stdint.h") && __has_include("stddef.h") 21#else 22 #error "__has_include failed (6)." 23#endif 24 25// Try non-existing file. 26#if __has_include("blahblah.h") 27 #error "__has_include failed (7)." 28#endif 29 30// Try defined. 31#if !defined(__has_include) 32 #error "defined(__has_include) failed (8)." 33#endif 34 35// Try different path permutations of __has_include_next with existing file. 36#if __has_include_next("stddef.h") // expected-warning {{#include_next in primary source file}} 37#else 38 #error "__has_include failed (1)." 39#endif 40 41#if __has_include_next(<stddef.h>) // expected-warning {{#include_next in primary source file}} 42#else 43 #error "__has_include failed (2)." 44#endif 45 46// Try unary expression. 47#if !__has_include_next("stdint.h") // expected-warning {{#include_next in primary source file}} 48 #error "__has_include_next failed (5)." 49#endif 50 51// Try binary expression. 52#if __has_include_next("stdint.h") && __has_include("stddef.h") // expected-warning {{#include_next in primary source file}} 53#else 54 #error "__has_include_next failed (6)." 55#endif 56 57// Try non-existing file. 58#if __has_include_next("blahblah.h") // expected-warning {{#include_next in primary source file}} 59 #error "__has_include_next failed (7)." 60#endif 61 62// Try defined. 63#if !defined(__has_include_next) 64 #error "defined(__has_include_next) failed (8)." 65#endif 66 67// Try badly formed expressions. 68// FIXME: I don't quite know how to avoid preprocessor side effects. 69// Use FileCheck? 70// It also assert due to unterminated #if's. 71//#if __has_include("stdint.h" 72//#if __has_include "stdint.h") 73//#if __has_include(stdint.h) 74//#if __has_include() 75//#if __has_include( 76//#if __has_include) 77//#if __has_include 78//#if __has_include(<stdint.h> 79//#if __has_include<stdint.h>) 80//#if __has_include("stdint.h) 81//#if __has_include(stdint.h") 82//#if __has_include(<stdint.h) 83//#if __has_include(stdint.h>) 84