Files
swift-mirror/test/Interpreter/lazy/deferred_syntax_errors.swift
Allan Shortlidge 2aed784ede Sema: Expand TypeRefinementContexts lazily for unparsed function bodies.
When building the TypeRefinementContext subtree for a function declaration,
postpone creation of the subtree if the function body is unparsed. This allows
the compiler to completely avoid parsing function bodies that have been skipped
(e.g. with -experimental-skip-non-inlinable-function-bodies) while still
ensuring that the TRCs for functions are built lazily later if needed. When
lazily generating SIL for a function with -experimental-lazy-typecheck, the
TRCs must be built out while typechecking the function in order to emit correct
diagnostics and SIL for `if #available` queries.

Resolves rdar://117448323
2023-11-09 16:02:58 -08:00

48 lines
954 B
Swift

// REQUIRES: OS=macosx
// REQUIRES: swift_interpreter
// RUN: %target-jit-run %s -enable-experimental-feature LazyImmediate | %FileCheck %s
// -enable-experimental-feature requires an asserts build
// REQUIRES: asserts
// REQUIRES: rdar118189728
// Tests that parsing of function bodies is deferred
// to runtime when the interpreter is invoked using
// experimental lazy compilation. Syntax errors in
// functions not executed at runtime should be ignored.
public func foo() {
3 +
}
// Syntax error in `foo` should be ignored
// CHECK: hello
print("hello")
public func bar(_ b: Bool) {
if b {
print("bar")
} else {
foo()
}
}
// Function `foo` with syntax error is not executed
// by bar, so the type error should again be ignored
// CHECK: bar
bar(true)
public func add(_ x: Int, _ y: Int, _ z: Int) -> Int {
return x + y + z
}
public func sub(_ x: Int, _ y: Int) -> Int {
return add(x,
}
// CHECK: 6
print(add(1, 2, 3))