1dac3ea4eSRichard Smith // RUN: %clang_cc1 %s -triple=i686-apple-darwin9 -verify -DVERIFY
2dac3ea4eSRichard Smith // expected-no-diagnostics
3dac3ea4eSRichard Smith 
4dac3ea4eSRichard Smith #ifndef __has_feature
5dac3ea4eSRichard Smith #error Should have __has_feature
6dac3ea4eSRichard Smith #endif
7dac3ea4eSRichard Smith 
8dac3ea4eSRichard Smith #if __has_feature(something_we_dont_have)
9dac3ea4eSRichard Smith #error Bad
10dac3ea4eSRichard Smith #endif
11dac3ea4eSRichard Smith 
12dac3ea4eSRichard Smith #if  !__has_builtin(__builtin_huge_val) || \
13dac3ea4eSRichard Smith      !__has_builtin(__builtin_shufflevector) || \
14dac3ea4eSRichard Smith      !__has_builtin(__builtin_convertvector) || \
15dac3ea4eSRichard Smith      !__has_builtin(__builtin_trap) || \
16dac3ea4eSRichard Smith      !__has_builtin(__c11_atomic_init) || \
17dac3ea4eSRichard Smith      !__has_builtin(__builtin_launder) || \
18dac3ea4eSRichard Smith      !__has_feature(attribute_analyzer_noreturn) || \
19dac3ea4eSRichard Smith      !__has_feature(attribute_overloadable)
20dac3ea4eSRichard Smith #error Clang should have these
21dac3ea4eSRichard Smith #endif
22dac3ea4eSRichard Smith 
23dac3ea4eSRichard Smith // These are technically implemented as keywords, but __has_builtin should
24dac3ea4eSRichard Smith // still return true.
25dac3ea4eSRichard Smith #if !__has_builtin(__builtin_LINE) || \
26dac3ea4eSRichard Smith     !__has_builtin(__builtin_FILE) || \
27dac3ea4eSRichard Smith     !__has_builtin(__builtin_FUNCTION) || \
28dac3ea4eSRichard Smith     !__has_builtin(__builtin_COLUMN) || \
29dac3ea4eSRichard Smith     !__has_builtin(__array_rank) || \
30dac3ea4eSRichard Smith     !__has_builtin(__underlying_type) || \
31dac3ea4eSRichard Smith     !__has_builtin(__is_trivial) || \
32*eb535d23SRichard Smith     !__has_builtin(__is_same_as) || \
33dac3ea4eSRichard Smith     !__has_builtin(__has_unique_object_representations)
34dac3ea4eSRichard Smith #error Clang should have these
35dac3ea4eSRichard Smith #endif
36dac3ea4eSRichard Smith 
37dac3ea4eSRichard Smith // This is a C-only builtin.
38dac3ea4eSRichard Smith #if __has_builtin(__builtin_types_compatible_p)
39dac3ea4eSRichard Smith #error Clang should not have this in C++ mode
40dac3ea4eSRichard Smith #endif
41dac3ea4eSRichard Smith 
42dac3ea4eSRichard Smith #if __has_builtin(__builtin_insanity)
43dac3ea4eSRichard Smith #error Clang should not have this
44dac3ea4eSRichard Smith #endif
45