1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
// RUN: %target-typecheck-verify-swift -D FOO -D BAZ -swift-version 4
#if FOO == BAZ // expected-error{{expected '&&' or '||' expression}}
var x = 0
#endif
#if ^FOO // expected-error {{expected unary '!' expression}}
var y = 0
#endif
#if foo(BAR) // expected-error {{invalid conditional compilation expression}}
var z = 0
#endif
#if FOO || !FOO
func f() {}
#endif ; f() // expected-error {{extra tokens following conditional compilation directive}}
#if FOO || !FOO
func g() {}
#else g() // expected-error {{extra tokens following conditional compilation directive}}
#endif
#if FOO || !FOO
func h() {}
#else /* aaa */
#endif /* bbb */
#if foo.bar() // expected-error {{invalid conditional compilation expression}}
.baz()
#endif
// <https://twitter.com/practicalswift/status/829066902869786625>
#if // expected-error {{incomplete condition in conditional compilation directive}}
#if 0 == // expected-error {{incomplete condition in conditional compilation directive}}
#if 0= // expected-error {{incomplete condition in conditional compilation directive}} expected-error {{'=' must have consistent whitespace on both sides}}
class Foo {
#if // expected-error {{incomplete condition in conditional compilation directive}}
#if 0 == // expected-error {{incomplete condition in conditional compilation directive}}
#if 0= // expected-error {{incomplete condition in conditional compilation directive}} expected-error {{'=' must have consistent whitespace on both sides}}
}
struct S {
#if FOO
#else
#else // expected-error {{further conditions after #else are unreachable}}
#endif
#if FOO
#elseif BAR
#elseif BAZ
#else
#endif
}
#if FOO
#else
#else // expected-error {{further conditions after #else are unreachable}}
#endif
#if FOO
#elseif BAR
#elseif BAZ
#else
#endif
#if os(ios)
#endif
#if os(uOS)
#endif
#if os(xxxxxxd)
#endif
#if os(bisionos)
#endif
#if arch(arn)
#endif
#if _endian(mid) // expected-warning {{unknown endianness for build configuration '_endian'}}
#endif
LABEL: #if true // expected-error {{expected statement}}
func fn_i() {}
#endif
fn_i() // OK
try #if false // expected-error {{expected expression}}
#else
func fn_j() {}
#endif
fn_j() // OK
#if foo || bar || nonExistent() // expected-error {{invalid conditional compilation expression}}
#endif
#if FOO = false
// expected-error @-1 {{invalid conditional compilation expression}}
undefinedFunc() // ignored.
#else
undefinedFunc() // expected-error {{cannot find 'undefinedFunc' in scope}}
#endif
#if false
#elseif FOO ? true : false
// expected-error @-1 {{invalid conditional compilation expression}}
undefinedFunc() // ignored.
#else
undefinedFunc() // expected-error {{cannot find 'undefinedFunc' in scope}}
#endif
/// Invalid platform condition arguments don't invalidate the whole condition.
// expected-warning@+1{{unknown endianness}}
#if !arch(arn) && !os(ystem) && !_endian(ness)
func fn_k() {}
#endif
fn_k()
#if os(cillator) || arch(i3rm)
func undefinedFunc() // ignored.
#endif
undefinedFunc() // expected-error {{cannot find 'undefinedFunc' in scope}}
#if os(simulator)
#endif
#if arch(iOS)
#endif
#if _endian(arm64) // expected-warning {{unknown endianness for build configuration '_endian'}}
#endif
#if targetEnvironment(_ObjC)
#endif
#if os(iOS) || os(simulator)
#endif
#if arch(ios)
#endif
#if FOO
#else if BAR
// expected-error@-1 {{unexpected 'if' keyword following '#else' conditional compilation directive; did you mean '#elseif'?}} {{1-9=#elseif}}
#else
#endif
#if FOO
#else
if true {}
#endif // OK
// rdar://83017601 Make sure we don't crash
#if canImport()
// expected-error@-1 {{'canImport' requires a module name}}
#endif
|