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