mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Find all the usages of `--enable-experimental-feature` or `--enable-upcoming-feature` in the tests and replace some of the `REQUIRES: asserts` to use `REQUIRES: swift-feature-Foo` instead, which should correctly apply to depending on the asserts/noasserts mode of the toolchain for each feature. Remove some comments that talked about enabling asserts since they don't apply anymore (but I might had miss some). All this was done with an automated script, so some formatting weirdness might happen, but I hope I fixed most of those. There might be some tests that were `REQUIRES: asserts` that might run in `noasserts` toolchains now. This will normally be because their feature went from experimental to upcoming/base and the tests were not updated.
147 lines
3.3 KiB
Swift
147 lines
3.3 KiB
Swift
// RUN: %batch-code-completion -enable-experimental-feature ImplicitLastExprResults -debug-forbid-typecheck-prefix FORBIDDEN
|
|
|
|
// REQUIRES: swift_feature_ImplicitLastExprResults
|
|
|
|
enum E {
|
|
case e
|
|
case f(Int)
|
|
}
|
|
|
|
struct NO {
|
|
// Triggering interface type computation of this will cause an assert to fire,
|
|
// ensuring we don't attempt to type-check any references to it.
|
|
static var TYPECHECK = FORBIDDEN
|
|
}
|
|
|
|
func test1() -> E {
|
|
if .random() {
|
|
();
|
|
.#^DOT1?check=DOT^#
|
|
} else {
|
|
.e
|
|
}
|
|
}
|
|
|
|
func test2() -> E {
|
|
switch Bool.random() {
|
|
case true:
|
|
.e
|
|
case false:
|
|
();
|
|
.#^DOT2?check=DOT^#
|
|
}
|
|
}
|
|
|
|
func test3() throws -> E {
|
|
switch Bool.random() {
|
|
case true:
|
|
NO.TYPECHECK
|
|
throw NO.TYPECHECK
|
|
case false:
|
|
();
|
|
.#^DOT3?check=DOT^#
|
|
}
|
|
}
|
|
|
|
struct S {
|
|
var e: E
|
|
}
|
|
|
|
func test4() throws -> E {
|
|
let x = switch Bool.random() {
|
|
case true:
|
|
NO.TYPECHECK
|
|
throw NO.TYPECHECK
|
|
case false:
|
|
let s = S(e: .e)
|
|
s.#^SDOT1?check=SDOT^#
|
|
}
|
|
return x
|
|
}
|
|
|
|
func test5() -> E {
|
|
();
|
|
.#^DOT4?check=DOT^#
|
|
}
|
|
|
|
func test6() -> E {
|
|
let fn: () -> E = {
|
|
();
|
|
.#^DOT5?check=DOT^#
|
|
}
|
|
return fn()
|
|
}
|
|
|
|
func test7() throws -> E {
|
|
print("hello")
|
|
switch Bool.random() {
|
|
case true:
|
|
NO.TYPECHECK
|
|
throw NO.TYPECHECK
|
|
case false:
|
|
();
|
|
.#^DOT7?check=DOT^#
|
|
}
|
|
}
|
|
|
|
// SDOT: Begin completions, 2 items
|
|
// SDOT-DAG: Keyword[self]/CurrNominal: self[#S#]; name=self
|
|
// SDOT-DAG: Decl[InstanceVar]/CurrNominal: e[#E#]; name=e
|
|
|
|
// DOT: Begin completions, 2 items
|
|
// DOT-DAG: Decl[EnumElement]/CurrNominal/Flair[ExprSpecific]/TypeRelation[Convertible]: e[#E#]; name=e
|
|
// DOT-DAG: Decl[EnumElement]/CurrNominal/Flair[ExprSpecific]/TypeRelation[Convertible]: f({#Int#})[#E#]; name=f()
|
|
|
|
struct TestImplicitLastExprMember {
|
|
func void() -> Void {}
|
|
func str() -> String { return "" }
|
|
func int() -> Int { return 0 }
|
|
|
|
func test1() -> Int {
|
|
print("hello")
|
|
#^TestImplicitLastExprMember1?check=IMPLICIT_LAST_EXPR_MEMBER^#
|
|
}
|
|
|
|
func test2() -> Int {
|
|
print("hello")
|
|
self.#^TestImplicitLastExprMember2?check=IMPLICIT_LAST_EXPR_MEMBER^#
|
|
}
|
|
|
|
func test3() -> Int {
|
|
{
|
|
print("hello")
|
|
#^TestImplicitLastExprMember3?check=IMPLICIT_LAST_EXPR_MEMBER^#
|
|
}()
|
|
}
|
|
|
|
func test4() -> Int {
|
|
();
|
|
{
|
|
print("hello")
|
|
self.#^TestImplicitLastExprMember4?check=IMPLICIT_LAST_EXPR_MEMBER^#
|
|
}()
|
|
}
|
|
|
|
// IMPLICIT_LAST_EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: void()[#Void#]; name=void()
|
|
// IMPLICIT_LAST_EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: str()[#String#]; name=str()
|
|
// IMPLICIT_LAST_EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Convertible]: int()[#Int#]; name=int()
|
|
|
|
func test5() {
|
|
let fn = {
|
|
print("hello")
|
|
self.#^TestImplicitLastExprMember5?check=IMPLICIT_LAST_EXPR_MEMBER_VOID^#
|
|
}
|
|
}
|
|
|
|
func test6() {
|
|
let fn: () -> Void = {
|
|
print("hello")
|
|
#^TestImplicitLastExprMember6?check=IMPLICIT_LAST_EXPR_MEMBER_VOID^#
|
|
}
|
|
}
|
|
|
|
// IMPLICIT_LAST_EXPR_MEMBER_VOID-DAG: Decl[InstanceMethod]/CurrNominal: void()[#Void#]; name=void()
|
|
// IMPLICIT_LAST_EXPR_MEMBER_VOID-DAG: Decl[InstanceMethod]/CurrNominal: str()[#String#]; name=str()
|
|
// IMPLICIT_LAST_EXPR_MEMBER_VOID-DAG: Decl[InstanceMethod]/CurrNominal: int()[#Int#]; name=int()
|
|
}
|